NodeJS MySQL 8无法连接解决方案

Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client

解决方案来自stackoverflow

node.js - MySQL 8.0 - Client does not support authentication protocol requested by server; consider upgrading MySQL client - Stack Overflow

 [推荐] 将“mysql.js”替换为“mysql2.js”包

npm un mysql && npm i mysql2

请注意,这mysql2是流行的分叉作品mysql,但它的受欢迎程度(2020 年 4 月每周 62 万次下载mysql2)已经接近原始包(2021mysql年 4 月每周 72 万次下载),因此进行切换似乎是合理的!

[不推荐] 降级“MySQL”以使用旧的“mysql_native_password”进行身份验证

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password ...

概括

  1. 如果您只是想消除错误,以冒项目安全风险为代价(例如,这只是个人项目或开发环境),请使用@Pras 的答案——ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'然后flush privileges
  2. 如果您想对其进行修复,但不知道为什么,只需安装和使用mysql2(而不是mysql)并使用它 --npm i mysql2mysql = require('mysql2');.
  3. 如果您是一位总是渴望学习的好奇开发人员,请继续阅读……:

这是怎么回事?

我们先搞清楚这是怎么回事。

MySQL 8 支持可插入的身份验证方法。默认情况下,使用其中一个 namedcaching_sha2_password而不是我们的好旧mysql_native_passwordsource)。很明显,使用经过多次握手的加密算法比已经存在24 年的普通密码传递更安全!

现在,问题出mysqljs在 Node(你安装并在你的 Node 代码中使用它的包npm i mysql)还不支持 MySQL 8 的这种新的默认身份验证方法。问题在这里: https: //github.com/mysqljs/mysql/issues/1507并且在 3 年后(截至 2019 年 7 月)仍然开放。

2019 年 6 月更新:现在mysqljs 中有一个新的 PR来解决这个问题!

2020 年 2 月更新:显然它计划在 mysqljs 的第 3 版中发布

2020年 7 月更新:显然它还没有(至少到 2020 年 4 月),但它声称node-mysql2正在支持身份验证切换请求。请在下面评论是否node-mysql2可以很好地解决这个问题——我稍后会自己测试。

2021 年 4 月更新:问题似乎仍然存在,就在 3 天前,有人创建了一个分支并将它放在那里——但还没有正式出现在 mysql.js 包中。此外,根据下面的评论,似乎mysql2 包工作正常并正确支持身份验证开关

您当前的选择

选项 1) [不推荐] 降级“MySQL”以使用旧的“mysql_native_password”进行身份验证

这就是每个人在这里的建议(例如上面的最佳答案)。您只需进入mysql并运行一个查询,说root可以使用旧mysql_native_password方法进行身份验证:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password ...

好消息是,生活将变得简单,您仍然可以毫无问题地使用像 Sequel Pro 这样的好旧工具。但问题是,您没有利用可用的更安全(也很酷,请阅读下文)的东西。

选项 2) [Meh...] 用 MySQL Connecter X DevAPI 替换“节点”包

MySQL X DevAPI for Node是Node 的 Mysqljs 包的替代品,由http://dev.mysql.com官方人员提供。

它就像一个支持身份验证的魅力caching_sha2_password。(只要确保您使用端口33060进行X 协议通信即可。)

糟糕的是,您已经离开了我们mysql每个人都习惯并依赖的旧包。

好消息是,您的应用程序现在更安全了,您可以利用我们的老朋友没有提供的大量新功能!只需查看X DevAPI 的教程,您就会发现它有大量可以派上用场的新特性。您只需要支付学习曲线的代价,这预计会伴随任何技术升级而来。:)

附言。不幸的是,这个 XDevAPI 包还没有类型定义(TypeScript 可以理解),所以如果你在typescript上,你会遇到问题。我尝试使用dts-genand生成 .d.ts dtsmake,但没有成功。所以记住这一点。

选项 3)[推荐] 将“mysql.js”替换为“mysql2.js”包

如上所述,mysql 包(NPM 包链接仍然存在此问题(截至 2021 年 4 月)。但是 mysql2 包(NPM 包链接)不是。所以可能以下应该是单行答案!

npm un mysql && npm i mysql2

请注意,这mysql2是流行的分叉作品mysql,但它的受欢迎程度(2020 年 4 月每周 62 万次下载mysql2)已经接近原始包(2021mysql年 4 月每周 72 万次下载),因此进行切换似乎是合理的!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
回答: 当使用Node.js连接MySQL数据库时,有时可能会遇到一些问题。其中一个常见的问题是"ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client"。这个错误通常是由于MySQL服务器使用了较新的身份验证协议,而Node.js的MySQL客户端不支持该协议所导致的。为了解决这个问题,你可以尝试升级你的MySQL客户端。你可以参考\[2\]中提供的错误信息来解决这个问题。另外,如果你遇到其他连接问题,你可以参考\[3\]中提供的参考链接,其中包含了一些常见的错误和解决方法。希望这些信息对你有帮助! #### 引用[.reference_title] - *1* [nodejs连接mysql数据库](https://blog.csdn.net/LLL3189860667/article/details/126844946)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [node.js连接mysql出现错误](https://blog.csdn.net/Salttswordfish/article/details/124830443)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [关于 Node.js 里连接 Mysql 数据库时的一些错误解决办法](https://blog.csdn.net/qq_52318356/article/details/128488255)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值