节点不能连接MySQL版本17+



我为Node写了一个简单的测试文件来访问我的Ubuntu服务器上的MySQL。对于Node版本14、15、16,它可以连接。对于Node版本17,18,19,则不能。

我在Ubuntu 20.04上使用MySQL 8.0.31。测试文件名为test.js,代码如下:

var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "correctpasswordhere"
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
});

我使用nvm选择我想要测试的Node版本。例如,我运行

nvm install 16
node test.js

输出:连接!

但是当我使用:

nvm install 17
node test.js

输出:


if (err) throw err;
^
Error: connect ECONNREFUSED ::1:3306
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1195:16)
--------------------
at Protocol._enqueue (/root/gatsby_test/node_test/node_modules/mysql/lib/protocol/Protocol.js:144:48)
at Protocol.handshake (/root/gatsby_test/node_test/node_modules/mysql/lib/protocol/Protocol.js:51:23)
at Connection.connect (/root/gatsby_test/node_test/node_modules/mysql/lib/Connection.js:116:18)
at Object.<anonymous> (/root/gatsby_test/node_test/test.js:9:5)
at Module._compile (node:internal/modules/cjs/loader:1099:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
at Module.load (node:internal/modules/cjs/loader:975:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
at node:internal/main/run_main_module:17:47 {
errno: -111,
code: 'ECONNREFUSED',
syscall: 'connect',
address: '::1',
port: 3306,
fatal: true
}
Node.js v17.9.1

我想使用最新版本的节点,但我需要它连接到MySQL。我在谷歌上搜索了一下,但只发现有人提到有错误的登录凭证。有人知道是怎么回事吗?谢谢!

如果你想阻止客户端通过IPv6连接到MySQL(这是正在发生的事情),不要使用localhost作为主机名,使用127.0.0.1代替。

或者,让MySQL也监听IPv6。