错误编号: 1251,SQL消息: '客户端不支持服务器请求的身份验证协议,请考虑升级MySQL客户端。

16

我正在使用nodejs创建简单的API项目。

为此,我已安装版本为8.0.11的mySql workbench。 我已创建配置文件、dbConnection.js文件,并在dbconnection.js文件中编写了以下代码:

var mysql = require('mysql');
var path = require('path');
var config = require(path.resolve('./', 'config'))

var connection = mysql.createConnection({
    host: config.databaseHost,
    user: config.databaseUser,
    password: config.databasePassword,
    database: config.databaseDatabaseName,
    multipleStatements: true
});

connection.connect(function (err) {
    if (err) {
        console.log('Error connecting to Database',err);
        return;
    }
    console.log('Connection established');
});
module.exports = connection;

我遇到了以下错误:

code: 'ER_NOT_SUPPORTED_AUTH_MODE', errno: 1251, sqlMessage: '服务器请求的认证协议不被客户端支持;请考虑升级MySQL客户端', sqlState: '08004', fatal: true

注意:我的配置尽可能简单,用户= root,密码= root,主机= localhost。

12个回答

22

一旦你在MySQL连接函数中设置好你的主机、根目录、密码等信息... 将以下内容粘贴到你正在尝试连接的工作台所在的数据库内:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_current_password';

回到终端并再次运行 node <文件名.js>


3
这个解决方案是解决问题最快、最简单的方式。 - jamesioppolo
这种方法完全没有成功的运气。同样的错误继续出现。我尝试了几种其他方法,比如创建一个全新的用户,但唯一有效的方法是使用mysql2作为库。 - Crann Moroney
更改密码值。 - Prateek p

16

使用mysql2代替mysql进行安装

npm install mysql2

然后将此内容添加到 index.js 文件中。

const mysql = require('mysql2')

13

打开终端并登录:

mysql -u root -p

(然后输入您的密码)

之后:

USE mysql;

UPDATE user SET authentication_string=password(''), plugin='mysql_native_password' WHERE user='root';

最后一个重要的事情是重置mysql服务:

sudo service mysql restart

1
当我粘贴UPDATE命令时,出现错误:1604,表示语法有误。 - Crann Moroney

8
您需要重新配置MySQL Server,按照以下步骤操作:
1)打开mysql安装器。 2)点击左侧的mysql服务器上的“重新配置”按钮。 3)转到身份验证方法选项卡(通过两次单击“下一步”)。 4)然后选择“使用传统的身份验证方法”单选按钮。点击下一步。 5)输入密码。 点击检查。 转到“应用配置”(通过两次单击“下一步”)。 6)点击“执行”。 然后点击“完成”。
这样就搞定了。 尽情地hack吧!

6

在使用node v17版本的mysql时遇到了错误代码1251

❌ // 没有起作用:errno 1251 ER_NOT_SUPPORTED_AUTH_MODE
import mysql from 'mysql';

尝试将mysql从node中移除并替换为mysql2

yarn remove 'mysql'
yarn add 'mysql2'
✅  import mysql2 from 'mysql2';

这个方法解决了我的问题!


5
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'current password';

0

如果您的密码不是root,请尝试使用您的用户名和密码进行登录。

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

0

我也遇到了同样的问题。对于root用户无效。我创建了一个新用户(使用mySQL workbench)并给予了该用户权限。然后我尝试使用新用户,它可以正常工作。查看workbench设置


0
这是因为你的mysql2版本过时了,请将其更新到当前的LTS版本。 我之前也遇到了同样的问题,然后我删除了我的node_modules文件和package-lock.json文件,并在我的package.json文件中将mysql2版本更改为当前的LTS版本,然后通过运行命令npm install重新安装了所有文件。

0
尝试移除mysql
yarn remove mysql
yarn add mysql2
import mysql2 from "mysql2"

以下代码解决了我的问题:

"ER_NOT_SUPPORTED_AUTH_MODE" errno : 1251 fatal : true sqlMessage : "客户端不支持服务器所请求的认证协议,请考虑升级 MySQL 客户端" sqlState : "08004"


请使用 反引号 正确格式化您的代码。 - Alessandro Benassi

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