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

Node.js使用mysql模块连接MySQL失败,相同凭据可正常登录数据库

Node.js 连接MySQL报错排查方案

首先修改代码输出完整错误信息,原代码仅打印自定义提示无法定位根因,调整连接回调逻辑:

connection.connect(function(err){
    if(err) {
        // 打印完整错误对象,通过错误码即可快速定位问题
        console.log("Error in connecting Mysql", err);
        throw err;
    } else {
        console.log("Connected");
    }
});

根据打印的错误码对应处理即可,常见问题及解决方法如下:

  • 错误码为 ER_NOT_SUPPORTED_AUTH_MODE
    该错误由认证方式不兼容导致,旧版mysql依赖不支持MySQL 8.0+默认的caching_sha2_password认证协议,两种解决方法:
    1. 替换依赖为适配新协议的mysql2,执行命令npm install mysql2,再将引入代码修改为const mysql = require('mysql2')即可,原有业务逻辑无需调整
    2. 手动修改对应用户的认证插件,登录MySQL执行SQL:
    ALTER USER 'mohit'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'abcd';
    FLUSH PRIVILEGES;
    
  • 错误码为 ER_ACCESS_DENIED_ERROR
    该错误为权限校验失败,排查以下两点:
    1. 原代码中port配置为字符串'3306',修改为数字port: 3306避免类型解析异常
    2. MySQL中用户权限和host绑定,你本地客户端可正常登录大概率是使用了localhost作为连接地址,而代码中使用127.0.0.1,二者在MySQL权限体系中是两个独立的配置,可直接将代码中host改为host: 'localhost',或者执行SQL给对应host的用户授权:
    GRANT ALL PRIVILEGES ON sampleDb.* TO 'mohit'@'127.0.0.1';
    FLUSH PRIVILEGES;
    
  • 错误码为 ECONNREFUSED
    该错误为连接被拒绝,检查MySQL服务是否正常启动,以及MySQL配置文件中bind-address参数是否允许127.0.0.1访问。
  • 无明确错误码仅提示超时
    可在连接配置中增加超时参数,调整后重试:
    var connection = mysql.createConnection({
      host     : '127.0.0.1',
      user     : 'mohit',
      password : 'abcd',
      database : 'sampleDb',
      port: 3306,
      connectTimeout: 10000 // 单位毫秒,设置10秒超时
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:24:03