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

Node.js连接MySQL报ER_ACCESS_DENIED_ERROR且连接IP异常问题求助

问题原因及解决方案

陌生IP的来源

MySQL报错Access denied for user '****'@'112.200.198.66'中的IP地址,不是你要连接的目标MySQL服务的IP,而是发起连接请求的Node.js程序所在机器的公网出口IP,你对报错字段的含义理解有误,才会觉得这个IP陌生。

排查步骤

  • 先确认.env配置是否正确加载
    绝大多数同类问题都是因为没有正确加载.env文件导致的:你需要先安装dotenv依赖,并且在项目入口文件最顶部添加require('dotenv').config()代码,才能让process.env读取到.env中的配置。可以在mysql.createPool执行前打印所有数据库相关的环境变量,确认读取的数值和你配置的一致:
    console.log('MYSQL_HOST:', process.env.MYSQL_HOST)
    console.log('MYSQL_USER:', process.env.MYSQL_USER)
    console.log('MYSQL_PORT:', process.env.MYSQL_PORT)
    console.log('MYSQL_PASSWORD:', process.env.MYSQL_PASSWORD)
    
  • 确认密码配置正确性
    检查.env中的数据库密码和Workbench使用的密码完全一致,.env文件中的密码不要加多余的单双引号,避免转义问题导致实际传入的密码错误。
  • 验证Node.js程序所在机器的出口IP
    在运行Node.js程序的机器上执行命令curl ifconfig.me,查看输出的公网IP是否和报错中的112.200.198.66一致,就能确认是不是该机器的出口IP。
  • 检查MySQL账号的授权规则
    你之前用MySQL Workbench可以正常连接,说明该账号的授权规则只允许Workbench所在机器的IP访问,没有放开Node.js所在机器的IP访问权限。

解决方法

  • 如果确认报错中的IP就是Node.js机器的出口IP,登录MySQL服务端执行授权命令即可:
    GRANT ALL PRIVILEGES ON 你的数据库名.* TO '你的用户名'@'112.200.198.66' IDENTIFIED BY '你的密码';
    FLUSH PRIVILEGES;
    
    测试环境如果不想固定IP,可以把IP换成通配符%允许所有IP访问,生产环境不推荐该操作。
  • 如果确认出口IP和报错IP不一致,检查运行Node.js的机器的hosts配置,是否有把MySQL域名错误解析到其他地址,同时检查项目代码中是否有其他地方覆盖了数据库连接的配置参数。

内容的提问来源于stack exchange,提问作者Ralph Stephen Bernal Jularbal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:24:06