You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Node.js连接MySQL时遇ER_NOT_SUPPORTED_AUTH_MODE错误求助

解决Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server问题

嘿,这个问题我太熟了!本质原因是MySQL 8.0及以上版本默认启用了caching_sha2_password认证插件,而你正在使用的旧版mysql Node.js模块并不支持这种新的认证协议,所以才会抛出这个错误。

给你两种最常用的解决办法,选一种适合你的就行:

方法一:修改MySQL用户的认证方式为旧版兼容模式

这种方法不需要改代码,直接调整MySQL的用户配置:

  • 首先登录MySQL命令行工具:
    mysql -u root -p
    
  • 输入密码进入后,执行以下SQL修改用户的认证插件(把root、localhost和'pass'替换成你实际的用户名、主机和密码):
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pass';
    
  • 最后刷新权限让配置生效:
    FLUSH PRIVILEGES;
    

退出MySQL后,再重新运行你的Node.js代码,应该就能正常连接数据库了。

方法二:改用支持新认证的Node.js数据库库

如果你不想改动MySQL的配置,可以换成mysql2包,它原生支持caching_sha2_password认证:

  • 先卸载旧的mysql包:
    npm uninstall mysql
    
  • 安装mysql2:
    npm install mysql2
    
  • 修改你的代码,只需要把引入模块的地方改成mysql2就行,其余代码完全不用动:
    var mysql = require('mysql2');
    var connection = mysql.createConnection({
     host : 'localhost',
     user : 'root',
     password : 'pass',
     database : 'my_db',
     insecureAuth : true
    });
    connection.connect();
    connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
     if (error) throw error;
     console.log('The solution is: ', results[0].solution);
    });
    connection.end();
    

运行修改后的代码,问题就能解决啦。

另外提一句:你代码里的insecureAuth: true是针对旧版认证的兼容配置,用方法一的话可以保留;用方法二的话这个配置其实可以删掉,不过留着也不会有问题。

内容的提问来源于stack exchange,提问作者Manoj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:35:58