MySQL 8.0与Node.js Express连接异常:ER_NOT_SUPPORTED_AUTH_MODE错误求助
解决Node.js Express连接MySQL 8.0时的ER_NOT_SUPPORTED_AUTH_MODE错误
嘿,这个ER_NOT_SUPPORTED_AUTH_MODE我之前踩过好几次坑,给你几个可能没覆盖到的排查点:
确认用户认证方式修改完全生效
很多时候改了用户认证但没刷新权限,或者host匹配不对:- 登录MySQL命令行,执行修改用户的命令(注意替换你的用户名、host和密码):
这里的ALTER USER 'your_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';%代表允许远程连接,如果是本地测试可以用localhost,但要和你代码里的host一致。 - 必须执行刷新权限命令,让修改立即生效:
FLUSH PRIVILEGES; - 可以用这条命令验证修改结果:
确保SELECT user, host, plugin FROM mysql.user WHERE user = 'your_user';plugin列显示的是mysql_native_password。
- 登录MySQL命令行,执行修改用户的命令(注意替换你的用户名、host和密码):
替换成mysql2模块
旧版的mysql模块对MySQL 8.0的兼容性不如mysql2,建议直接切换:- 安装mysql2:
npm install mysql2 - 修改代码中的引用,比如用连接池的写法(比单连接更稳定):
const mysql = require('mysql2'); // 创建连接池 const pool = mysql.createPool({ host: 'localhost', user: 'your_user', password: 'your_password', database: 'your_db_name', // 手动指定认证插件,避免自动适配出错 authPlugin: 'mysql_native_password' }); // 使用连接池查询示例 pool.query('SELECT * FROM your_table', (err, results) => { if (err) throw err; console.log('查询结果:', results); });
- 安装mysql2:
修改MySQL全局默认认证插件
如果上面的修改还是无效,可能是MySQL全局默认的认证插件还是caching_sha2_password,需要改配置文件:- 找到MySQL的配置文件(Linux是
/etc/my.cnf或/etc/mysql/my.cnf,Windows是my.ini,通常在MySQL安装目录下)。 - 在
[mysqld]段落添加:default_authentication_plugin=mysql_native_password - 重启MySQL服务,确保配置生效。
- 找到MySQL的配置文件(Linux是
检查连接参数的细节
有时候代码里的host写错了(比如用了127.0.0.1但用户的host是localhost,或者反过来),或者密码里有特殊字符没转义,这些小细节也可能导致认证失败。
内容的提问来源于stack exchange,提问作者Ameya
相关产品推荐
相关产品推荐

