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

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匹配不对:

    1. 登录MySQL命令行,执行修改用户的命令(注意替换你的用户名、host和密码):
      ALTER USER 'your_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';
      
      这里的%代表允许远程连接,如果是本地测试可以用localhost,但要和你代码里的host一致。
    2. 必须执行刷新权限命令,让修改立即生效:
      FLUSH PRIVILEGES;
      
    3. 可以用这条命令验证修改结果:
      SELECT user, host, plugin FROM mysql.user WHERE user = 'your_user';
      
      确保plugin列显示的是mysql_native_password。
  • 替换成mysql2模块
    旧版的mysql模块对MySQL 8.0的兼容性不如mysql2,建议直接切换:

    1. 安装mysql2:
      npm install mysql2
      
    2. 修改代码中的引用,比如用连接池的写法(比单连接更稳定):
      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);
      });
      
  • 修改MySQL全局默认认证插件
    如果上面的修改还是无效,可能是MySQL全局默认的认证插件还是caching_sha2_password,需要改配置文件:

    1. 找到MySQL的配置文件(Linux是/etc/my.cnf或/etc/mysql/my.cnf,Windows是my.ini,通常在MySQL安装目录下)。
    2. 在[mysqld]段落添加:
      default_authentication_plugin=mysql_native_password
      
    3. 重启MySQL服务,确保配置生效。
  • 检查连接参数的细节
    有时候代码里的host写错了(比如用了127.0.0.1但用户的host是localhost,或者反过来),或者密码里有特殊字符没转义,这些小细节也可能导致认证失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:31:11