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的授权列表里。登录数据库执行以下命令查看权限:
如果没有包含你的本地IP或SELECT user, host FROM mysql.user WHERE user = 'myusr';%(允许所有来源),执行授权命令: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
相关产品推荐
相关产品推荐

