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

Node.js+MySQL报错1251:客户端不支持服务器要求的认证协议

解决Sequelize连接MySQL时的1251认证协议错误

嘿,这个问题我碰到过好多次啦!本质原因是你的MySQL版本大概率是8.0及以上,默认启用了caching_sha2_password这种更安全的认证插件,但你当前使用的Sequelize或MySQL客户端版本不支持这个协议,所以才抛出了这个错误。下面给你两个可行的解决办法,按需选择:

方法一:修改MySQL用户的认证方式(开发环境快速搞定)

如果你只是在本地开发测试,想快速解决问题,可以直接把用户的认证方式改回旧的mysql_native_password:

  1. 打开终端,登录MySQL命令行:

    mysql -u root -p
    

    输入你的root密码(就是你代码里写的passwd)进入控制台。

  2. 执行这条SQL修改用户认证规则:

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'passwd';
    

    注意把这里的passwd替换成你实际的数据库密码,要和代码里的保持一致哦。

  3. 最后刷新权限让修改生效:

    FLUSH PRIVILEGES;
    

做完这些,重新运行你的Node.js脚本,应该就能正常连接数据库了。

方法二:升级依赖适配新认证协议(生产环境推荐)

如果是生产环境,或者不想改动MySQL的安全配置,更规范的做法是升级你的依赖,让客户端支持新的认证协议:

  1. 先卸载旧的MySQL客户端依赖:

    npm uninstall mysql mysql2
    
  2. 安装最新版本的mysql2(它对新认证协议的支持更好):

    npm install mysql2@latest
    
  3. (可选但稳妥)修改你的代码,手动指定使用mysql2作为dialect模块:

    const Sequelize = require('sequelize');
    const mysql2 = require('mysql2');
    const sequelize = new Sequelize('database', 'root', 'passwd', {
      host: 'localhost',
      dialect: 'mysql',
      dialectModule: mysql2,
      operatorsAliases: false
    });
    

另外,如果你的Sequelize版本比较旧,也建议一并升级到最新稳定版,避免其他潜在的兼容性问题:

npm uninstall sequelize
npm install sequelize@latest

升级完成后,客户端就能完美支持caching_sha2_password认证,不需要改动MySQL的任何配置,更符合生产环境的安全要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:15:50