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

24

Node.js中使用MySQL出现问题

const mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '123456789',
  database : 'userdata'
});

connection.connect(function(err) {
  if (err) {
    console.error('error connecting: ' + err);
    return;
  }

 console.log('connected as id ' + connection.threadId);
});

错误: ER_NOT_SUPPORTED_AUTH_MODE: 客户端不支持服务器请求的认证协议,请考虑升级 MySQL 客户端。


如果您正在使用 MySQL 8.0 系列,请同时查看此链接:[https://dev59.com/7lUL5IYBdhLWcg3wbne4#50377944]。 - ruiquelhas
Prashant Gupta -- 对我来说它起作用了,非常感谢你! - Kumar
5个回答

46

遇到了相同的问题。

请安装MySQL Workbench

在 MySQL Workbench 中执行此查询:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456789';

返回 Node.js 并再次尝试运行该文件。它应该可以工作,至少对我来说是这样。


这个查询禁止我使用WorkBench访问数据库。 - Waseem Ahmad Naeem
我刚刚运行了这个查询,现在甚至无法登录工作台。 - Neil Girardi
不要在root用户上使用它。通常情况下,将root用户用作应用程序用户是不好的选择。特别是因为可以通过两个命令创建一个新用户并授予其一个数据库的所有权限:CREATE USER 'other_user'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456789'; GRANT ALL PRIVILEGES ON userdata.* TO 'other_user'@'localhost'; - Michael Plautz

9

最佳解决方案尝试这个,它将解决问题:

您使用"mysql安装程序"安装了mysql服务器

1)open -> "mysql intsaller"

2)press reconfig mysql server

3)select left side "authentication method tab"

4)select radio button -->use legacy authentication method

5)now stop and restart the db 

谢谢!


8
在任何数据库软件中(如mysql workbench、datagrip、dbeaver等):
首先运行此查询:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

其次,如果问题仍然存在,请运行此查询:

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

将这两个查询分开组合并运行,对于我在使用Dockerized MySQL时起到了作用。

运行这两个语句顺序执行成功了! - Ahsin Shabbir

1

使用PhpMyadmin解决方案

  1. root身份登录服务器
  2. 点击"用户账户" enter image description here
  3. 找到您将用于客户端登录的用户
  4. 点击"更改密码" enter image description here
  5. 输入您的旧密码,然后将密码哈希更改为本地MySQL身份验证 enter image description here
  6. 点击"执行"
  7. 密码和身份验证方法已更改。现在尝试使用您的客户端。

0
更新节点版本至16.X或更高,并在节点API文件中将模块从'mysql/sync-mysql'更改为'mysql2'。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接