Node.js 无法连接Mysql
今天在我运行:node server.js 时,网站一直一直一直连接不上Mysql
终端提示:
D:\GM\html\HR\HR>node server.js
服务器正在运行,访问地址:http://localhost:3000
数据库连接失败: Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client at Sequence._packetToError (D:\GM\html\HR\HR\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14) at Handshake.ErrorPacket (D:\GM\html\HR\HR\node_modules\mysql\lib\protocol\sequences\Handshake.js:123:18) at Protocol._parsePacket (D:\GM\html\HR\HR\node_modules\mysql\lib\protocol\Protocol.js:291:23) at Parser._parsePacket (D:\GM\html\HR\HR\node_modules\mysql\lib\protocol\Parser.js:433:10) at Parser.write (D:\GM\html\HR\HR\node_modules\mysql\lib\protocol\Parser.js:43:10) at Protocol.write (D:\GM\html\HR\HR\node_modules\mysql\lib\protocol\Protocol.js:38:16) at Socket.
这个错误是由于 MySQL 8.0 默认使用了 caching_sha2_password 认证插件,而 mysql 模块(Node.js 的 MySQL 客户端)不支持这种认证方式。解决方法是更改 MySQL 用户的认证方式,或者升级到支持 caching_sha2_password 的 MySQL 客户端。
以下是解决方法:
方法 1:更改 MySQL 用户的认证方式
将 MySQL 用户的认证方式更改为 mysql_native_password,这是最常见的解决方案。
- 登录 MySQL
在终端中运行以下命令登录 MySQL:
mysql -u root -p - 更改用户的认证方式
运行以下命令,将 root 用户的认证方式更改为 mysql_native_password:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
3. 刷新权限
运行以下命令刷新权限:
FLUSH PRIVILEGES;
4. 退出 MySQL
运行以下命令退出 MySQL:
exit
5. 重启 Node.js 服务器
重新运行 server.js:
node server.js
方法 2:升级 MySQL 客户端
如果你希望继续使用 caching_sha2_password,可以升级到支持该认证方式的 MySQL 客户端。
- 安装 mysql2 模块
mysql2 是一个支持 caching_sha2_password 的 MySQL 客户端模块。运行以下命令安装:
npm install mysql2
2. 修改 server.js 中的数据库连接代码
将 mysql 替换为 mysql2,如下所示:
const mysql = require('mysql2'); // 使用 mysql2 替代 mysql
const db = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'asd881215',
database: 'HR',
port: 3306
});
- 重启 Node.js 服务器
重新运行 server.js:
node server.js
方法 3:降级 MySQL 版本
如果你不想更改认证方式或升级客户端,可以考虑降级 MySQL 到 5.7 版本,因为它默认使用 mysql_native_password。
推荐方法
方法 1 是最简单且常用的解决方案,适合大多数场景。如果你需要使用 MySQL 8.0 的新功能,可以选择 方法 2。

浙公网安备 33010602011771号