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. (D:\GM\html\HR\HR\node_modules\mysql\lib\Connection.js:88:28) at Socket. (D:\GM\html\HR\HR\node_modules\mysql\lib\Connection.js:526:10) at Socket.emit (node:events:518:28) at addChunk (node:internal/streams/readable:561:12) -------------------- at Protocol._enqueue (D:\GM\html\HR\HR\node_modules\mysql\lib\protocol\Protocol.js:144:48) at Protocol.handshake (D:\GM\html\HR\HR\node_modules\mysql\lib\protocol\Protocol.js:51:23) at Connection.connect (D:\GM\html\HR\HR\node_modules\mysql\lib\Connection.js:116:18) at Object. (D:\GM\html\HR\HR\server.js:23:4) at Module._compile (node:internal/modules/cjs/loader:1554:14) at Object..js (node:internal/modules/cjs/loader:1706:10) at Module.load (node:internal/modules/cjs/loader:1289:32) at Function._load (node:internal/modules/cjs/loader:1108:12) at TracingChannel.traceSync (node:diagnostics_channel:322:14) at wrapModuleLoad (node:internal/modules/cjs/loader:220:24) { code: 'ER_NOT_SUPPORTED_AUTH_MODE', errno: 1251, sqlMessage: 'Client does not support authentication protocol requested by server; consider upgrading MySQL client', sqlState: '08004', fatal: true }

这个错误是由于 MySQL 8.0 默认使用了 caching_sha2_password 认证插件,而 mysql 模块(Node.js 的 MySQL 客户端)不支持这种认证方式。解决方法是更改 MySQL 用户的认证方式,或者升级到支持 caching_sha2_password 的 MySQL 客户端。

以下是解决方法:

方法 1:更改 MySQL 用户的认证方式

将 MySQL 用户的认证方式更改为 mysql_native_password,这是最常见的解决方案。

  1. 登录 MySQL
    在终端中运行以下命令登录 MySQL:
    mysql -u root -p
  2. 更改用户的认证方式
    运行以下命令,将 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 客户端。

  1. 安装 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
});
  1. 重启 Node.js 服务器
    重新运行 server.js:

node server.js
方法 3:降级 MySQL 版本
如果你不想更改认证方式或升级客户端,可以考虑降级 MySQL 到 5.7 版本,因为它默认使用 mysql_native_password。

推荐方法
方法 1 是最简单且常用的解决方案,适合大多数场景。如果你需要使用 MySQL 8.0 的新功能,可以选择 方法 2。

posted @ 2025-04-04 20:00  旗阳  阅读(276)  评论(1)    收藏  举报