Node.js 17+版本无法连接Ubuntu服务器上的MySQL问题求助
解决Node.js 17+无法连接MySQL 8.0的问题
问题根源
Node.js 17及以上版本默认将DNS解析优先级调整为IPv6优先,而你的MySQL 8.0.31服务未监听IPv6的::1地址(仅监听IPv4的127.0.0.1),导致连接请求被拒绝(错误日志中address: '::1'的信息可佐证此原因)。
解决方法
方法1:修改Node连接配置(推荐,无需改动MySQL)
将连接配置中的host从localhost改为127.0.0.1,强制使用IPv4连接:
var mysql = require('mysql'); var con = mysql.createConnection({ host: "127.0.0.1", // 替换原有的localhost user: "root", password: "correctpasswordhere" }); con.connect(function(err) { if (err) throw err; console.log("Connected!"); });
方法2:修改MySQL配置,开启IPv6监听
编辑MySQL配置文件(通常路径为/etc/mysql/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf),找到bind-address配置项,修改为同时监听IPv4和IPv6:
bind-address = :: # 或者指定多个地址:bind-address = 127.0.0.1,::1
保存后重启MySQL服务:
sudo systemctl restart mysql
方法3:临时调整Node.js的DNS解析顺序
启动Node时添加--dns-result-order=ipv4first参数,强制优先使用IPv4:
node --dns-result-order=ipv4first test.js
若需永久生效,可将该参数添加到Node的环境变量或项目启动脚本中。
内容的提问来源于stack exchange,提问作者user752894
相关产品推荐
相关产品推荐

