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

Man*_*ani 3 mysql node.js express

我正在尝试使用以下代码连接到 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();
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

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

我在本地安装了 MySQL-installer-community-8.0.11.0。

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

tho*_*bro 5

我正在使用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 及更高版本支持此变量。

尝试设置MYSQL_ROOT_PASSWORD您的 docker 环境。您可能还需要更改用户的身份验证模式。

> mysql -u root -p

ALTER USER 'username'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
Run Code Online (Sandbox Code Playgroud)

为我工作。

编辑:检查设置了什么身份验证:

SELECT user, plugin FROM mysql.user WHERE user = 'username';
Run Code Online (Sandbox Code Playgroud)