提问者:小点点

错误:ER_NOT_SUPPORTED_AUTH_MODE:客户端不支持服务器请求的身份验证协议;考虑升级MySQL客户端


我正在尝试使用以下代码连接到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-安装程序-社区-8.0.11.0安装在我的本地。

我是否需要安装任何其他连接器才能连接到数据库?


共3个答案

匿名用户

昨天我在使用mysql nodejs的docker容器时遇到了同样的问题。到目前为止,我还没有找到修复方法,但它与新的mysql版本(8. X)有关。在我用版本5重新安装mysql后,一切对我来说都很好。

匿名用户

我在用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';

匿名用户

如果我们在MySQL(8. x)安装期间选择MySQL(5.x)的旧密码加密,MySQL(8.x)连接可以正常工作。如果我在安装期间使用Mysql(8.x)选择强密码加密,它将不起作用。