Node JS和mysql无法连接(客户端不支持服务器请求的认证协议,请考虑升级mysql客户端)。

5
我将尝试连接我的 NodeJs 应用程序与 mysql 数据库,但由于某种原因它无法连接。
我像这样安装了 mysql npm(在命令行中输入):
npm install mysql

在我安装了mysql的npm包之后,我创建了一个index.js文件,并在该文件中尝试连接我的数据库。

下面是我在index.js文件中用于连接mysql的代码:

const mysql      = require('mysql');

var connection = mysql.createConnection({
    host     : 'localhost',
    user     : 'root',
    port     : '3306',
    password : 'test12310',
    database : 'fys'
});


connection.connect((err) => {
    if(!err)
        console.log('Database is geconnect!');
    else
        console.log('Database connectie niet gelukt!  : '+ JSON.stringify(err, undefined,2));
});

然后我尝试运行代码并查看与MySQL的连接是否正常。我在命令行中输入了以下内容:

node index.js

这是我在命令提示符中获得的错误消息:
错误图片
有人知道我如何修复此错误并在nodejs中与我的mysql数据库建立连接吗?
非常感谢任何形式的帮助。
5个回答

11

我曾经遇到过同样的问题,使用mysql库时出现错误,我通过切换到mysql2库来解决了这个问题,我建议你安装mysql2

运行

npm install mysql2

那么

import mysql from "mysql2";

或者

const mysql = require("mysql2")

我希望这对你有用!祝你好运


这个对我解决了,我使用yarn而不是npm: "yarn add mysql2 --save" - Falco

11

为使用MySQL 8.0的新认证方法,请使用新的mysql2库代替mysql

已在节点版本13.6.0和MySQL 8.0.21中进行测试。


请在提及 MySql 的同时也注明 NODE JS 的版本。 - Haseeb Mir
在我的电脑上运行 Node 12.13.0 和 MySQL 8.0.22 是可行的。 - officialMKL

6

与其

mysqlConnection.connect((err) => {

使用

connection.connect((err) => {

if(!err)
    console.log('Database is connected!');
else
    console.log('Database not connected! : '+ JSON.stringify(err, undefined,2));
});

[这里是代码的教程参考]1

针对您的mysql错误:

在MYSQL Workbench中执行以下查询:

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

在您这样做后,尝试使用 Node 连接。


现在它给了我另一个错误:客户端不支持服务器请求的身份验证协议,请考虑升级mysql客户端。 - johnny
你能解释一下这行代码的作用吗? ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password' - Eboubaker
1
@ZOLDIK,这是为了重置你用于连接节点服务器和MySQL的MySQL root密码,谈论连接字符串... - Sayed Mohd Ali

3
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourRootPassword';
-- or
CREATE USER 'foo'@'%' IDENTIFIED WITH mysql_native_password BY 'bar';
-- then
FLUSH PRIVILEGES;

0

安装mysql2并移除mysql:

npm uninstall mysql
npm install mysql2

现在,在您的代码中唯一需要做的就是更改这行代码:

const mysql = require("mysql");

FOR:

const mysql = require("mysql2");

请注意,您正在将mysql2导入并将其命名为mysql,以便您无需更改代码中的其他行。

在发布其他答案之前,请检查所有其他答案,并检查是否已有与您的答案类似的现有答案。 - Kuro Neko

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