errno: 1251, sqlMessage: '客户端不支持服务器请求的身份验证协议;考虑升级 MySQL 客户端

问题描述 投票:0回答:13

我正在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;

我面临以下错误:

代码:'ER_NOT_SUPPORTED_AUTH_MODE', 错误号:1251, sqlMessage: '客户端不支持服务器请求的身份验证协议;考虑升级 MySQL 客户端', sql状态:'08004', 致命:正确

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

mysql node.js express mysql-workbench
13个回答
27
投票

一旦您在 MySQL 连接函数中建立了主机、root、密码等。将以下内容粘贴到数据库中,您将尝试使用以下内容在工作台中连接:

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

返回终端并再次运行节点

<file name.js>


20
投票

安装mysql2而不是mysql

npm install mysql2

然后将其添加到index.js

const mysql = require('mysql2')

14
投票

打开终端并登录:

mysql -u root -p

(然后输入您的密码)

之后:

USE mysql;

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

最后重要的是重置 mysql 服务:

sudo service mysql restart

8
投票

您必须重新配置MySQL服务器。为此,请按照以下步骤操作。

1) 打开mysql intsaller

2) 点击重新配置(到左边的mysql服务器)

3) 转到身份验证方法选项卡(单击下一步两次。)

4) 然后选择单选按钮使用旧版身份验证方法。单击下一步。

5) 输入您的密码。单击“检查”。转到 应用配置(单击下一步两次)。

6) 单击执行。然后完成。

就是这样。享受黑客攻击!!


8
投票

使用 mysql 在节点 v17 中收到错误 1251

❌ // 不起作用:errno 1251 ER_NOT_SUPPORTED_AUTH_MODE

从 'mysql' 导入 mysql;

尝试从节点中删除

mysql
并将其替换为
mysql2

纱线删除'mysql'
纱线添加'mysql2'
✅ 从 'mysql2' 导入 mysql2;

这解决了我的问题!


6
投票
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'current password';

0
投票

我也遇到了同样的问题。它对 root 用户不起作用。我创建了一个新用户(使用 mySQL 工作台)并向新用户授予权限。然后我尝试使用新用户,效果很好。 查看工作台设置


0
投票

尝试删除

mysql

yarn remove mysql
yarn add mysql2
import mysql2 from "mysql2"

这对我来说解决了问题。 代码 :

“ER_NOT_SUPPORTED_AUTH_MODE” 错误号 : 第1251章 致命的 : 真的 sql消息 : “客户端不支持服务器请求的身份验证协议;考虑升级 MySQL 客户端” sql状态 : “08004”


0
投票

使用您的密码和用户名 root 尝试此操作,如果您的密码不是 root,请尝试使用您的密码。

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

0
投票

我不想操纵我的“root”用户,因为我在 Java 应用程序中使用它,所以我决定为 NodeJS 内容创建一个新用户。

我使用的是 MySQL 8.0.31,Node 的 MySQL 版本为“2.18.1” 这个解决方案确实解决了我的问题:

首先,使用root权限登录MySQL服务器:

mysql -u <MYSQL_USER> -p <MYSQL_PASSWORD>

进入 mysql shell 后,运行以下命令:

create user '<YOUR_USERNAME>'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY '<YOUR_PASSWORD>';

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

FLUSH PRIVILEGES;

0
投票

1.复制以下代码

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

2.粘贴到你要连接的Table中

3.运行迅雷图标

enter image description here


0
投票

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


0
投票

确保在连接设置中指定此端口,因为我的 MySQL 服务器在端口 3308 上运行

const db = mysql.createConnection({
    host: process.env.DB_HOST,
    user: process.env.DB_USER,
    password: process.env.DB_PASS,
    database: process.env.DB_NAME,
    port: 3308  // Ensure this matches the MySQL port
});

这对我有用...

© www.soinside.com 2019 - 2024. All rights reserved.