尝试使用以下代码连接到MySQL数据库。
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : 'pass',
database : 'my_db',
insecureAuth : true
});
connection.connect();
connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
if (error) throw error;
console.log('The solution is: ', results[0].solution);
});
connection.end();
但我得到以下错误:
错误:ER_NOT_SUPPORTED_AUTH_MODE:客户端不支持服务器请求的身份验证协议;考虑升级MySQL客户端
我在本地安装了MySQL-installer-community-8.0.11.0。
我是否需要安装任何其他连接器才能连接数据库?
答案 0 :(得分:2)
我昨天用我的docker容器和mysql + nodejs遇到了同样的问题。 到目前为止我还没找到修复程序,但它有新的mysql版本(8.X)。 在我用版本5重新安装mysql后,一切都很适合我。
答案 1 :(得分:1)
如果我们在安装过程中选择强密码加密,则会遇到一些问题或者我们需要对Mysql(8.x)进行一些设置更改。如果我们在MySQL(8.x)安装期间选择MySQL(5.x)的传统密码加密,MySQL(8.x)连接可以正常工作。
答案 2 :(得分:0)
我会尝试删除insecureAuth:true行,然后重试。
答案 3 :(得分:0)
我正在使用https://hub.docker.com/r/mysql/mysql-server/
在文档中说
MYSQL_ONETIME_PASSWORD
:当变量为true时(即它的 默认状态,除非设置了MYSQL_ROOT_PASSWORD
或MYSQL_ALLOW_EMPTY_PASSWORD
设置为true),root用户的密码 设置为已过期,必须更改后才能使用MySQL 一般。仅MySQL 5.6和更高版本支持此变量。
尝试为您的Docker环境设置MYSQL_ROOT_PASSWORD
。
您可能还需要更改用户的身份验证模式。
> mysql -u root -p
ALTER USER 'username'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
为我工作。
编辑: 要检查设置了什么身份验证,请执行以下操作:
SELECT user, plugin FROM mysql.user WHERE user = 'username';
答案 4 :(得分:0)
我遇到了同样的问题,该解决方案对我有用:
Users and Privileges
。Add Account
。node_test
)。Standard
。 Limit to Host Matching
设置为localhost。coding-is-awesome
)。结果代码如下:
var mysql = require("mysql");
var con = mysql.createConnection({
host: "localhost",
user: "node_test",
password: "coding-is-awesome"
});
con.connect(function(err) {
if (err) {
console.log("Failed to connect");
throw err;
} else {
console.log("Connected!");
}
});