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

Node.js MySQL可连接某地址但无法连接另一IP的问题求助

Node.js MySQL模块使用IP地址无法连接,但Sequel Ace可正常连接的问题

我使用Node.js MySQL模块的以下代码可以正常连接数据库:

// create mysql connection
const con = mysql.createConnection({
  host: 'ip-208-109-35-193.ip.secureserver.net',
  user: 'myusr',
  password: 'mypass',
  database : 'admin_ad',
  port: '3306'
});

con.connect(function(err) {
  if (err) {
    console.log('Failed to connect MySQL.');
    console.error(err);
    return;
}
});

但将host更换为IP地址64.64.64.64后,连接失败:

const con = mysql.createConnection({
  host: '64.64.64.64',
  user: 'myusr',
  password: 'mypass',
  database : 'admin_ad',
  port: '3306'
});

我在Mac本地使用Sequel Ace应用,用完全相同的凭证可以成功连接。想知道Node.js MySQL是否对host有特殊处理?或是有需要解除的防护设置?不清楚为何相同凭证在应用中可用但在Node.js MySQL中无法连接。


可能的原因及解决办法

  • MySQL用户权限限制:MySQL的用户权限与登录来源绑定。用域名连接时,实际登录IP是域名解析后的地址;直接用IP时,登录来源是当前客户端IP,这个IP可能不在myusr的授权列表里。登录数据库执行以下命令查看权限:
    SELECT user, host FROM mysql.user WHERE user = 'myusr';
    
    如果没有包含你的本地IP或%(允许所有来源),执行授权命令:
    GRANT ALL PRIVILEGES ON admin_ad.* TO 'myusr'@'你的本地IP' IDENTIFIED BY 'mypass';
    FLUSH PRIVILEGES;
    
  • 连接选项差异:Sequel Ace可能默认启用了SSL,而Node.js MySQL模块默认未开启。尝试在连接配置中添加SSL选项:
    const con = mysql.createConnection({
      host: '64.64.64.64',
      user: 'myusr',
      password: 'mypass',
      database : 'admin_ad',
      port: '3306',
      ssl: { rejectUnauthorized: false } // 若服务器有合法证书可移除该参数
    });
    
  • 网络路由/解析差异:域名解析后的IP可能和64.64.64.64不一致,或者Node.js进程的网络路由与Sequel Ace不同(比如代理设置)。在终端执行nslookup ip-208-109-35-193.ip.secureserver.net,对比解析出的IP与64.64.64.64是否一致。
  • 防火墙/安全组限制:服务器安全组可能对不同进程的网络请求做了区分,导致Node.js的连接被拦截。检查服务器端防火墙规则,确保你的本地IP能访问3306端口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:57:18