错误:er\u不支持\u auth\u模式:客户端不支持服务器请求的身份验证协议;考虑升级mysql客户端

ej83mcc0  于 2021-06-21  发布在  Mysql
关注(0)|答案(5)|浏览(393)

我试图连接到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\u不支持身份验证模式:客户端不支持服务器请求的身份验证协议;考虑升级mysql客户端
我已经在本地安装了mysql-installer-community-8.0.11.0。
我需要安装其他连接器来连接数据库吗?

qq24tv8q

qq24tv8q1#

如果在安装mysql(8.x)时选择mysql(5.x)的遗留密码加密,那么mysql(8.x)连接可以正常工作。如果我在安装过程中选择mysql(8.x)的强密码加密,它将无法工作。

uqjltbpv

uqjltbpv2#

我也遇到了同样的问题,这个解决方案对我很有效:
转到mysql工作台并单击当前数据库。
在“导航器”窗口(左侧)中,单击 Users and Privileges .
点击 Add Account 在用户列表的底部。
给它另一个登录名(例如。 node_test ).
将身份验证类型设置为 Standard .
Limit to Host Matching 到本地主机。
设置新密码(例如。 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!");
  }
});
brtdzjyr

brtdzjyr3#

我将尝试删除不安全的auth:true行,然后重试。

z9smfwbn

z9smfwbn4#

昨天我用mysql+nodejs处理docker容器时遇到了同样的问题。到目前为止,我还没有找到一个修复程序,但它与新的mysql版本(8.x)有些关系。在我用版本5重新安装mysql之后,一切都很好。

odopli94

odopli945#

我在用https://hub.docker.com/r/mysql/mysql-server/
医生说 MYSQL_ONETIME_PASSWORD :当变量为true时(这是其默认状态,除非 MYSQL_ROOT_PASSWORD 已设置或 MYSQL_ALLOW_EMPTY_PASSWORD 设置为true),根用户的密码设置为过期,必须更改才能正常使用mysql。只有MySQL5.6及更高版本才支持此变量。
尝试设置 MYSQL_ROOT_PASSWORD 为您的docker环境。您可能还需要更改用户的身份验证模式。

> mysql -u root -p

ALTER USER 'username'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

为我工作。
编辑:要检查设置了什么身份验证:

SELECT user, plugin FROM mysql.user WHERE user = 'username';

相关问题