我已经设置了一个MySQL数据库.当我尝试通过我的Node JS服务器访问它时,我收到错误
"ER_NOT_SUPPORTED_AUTH_MODE:客户端不支持服务器请求的身份验证协议;请考虑升级MariaDB客户端"
这很奇怪,因为我已经卸载了MariaDB并使用Homebrew安装了MySQL.
这是我的连接尝试:
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '********',
database : 'vod_bill_database'
});
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?谢谢
Arc*_*dze 58
现在8.0版本是更改插件的方法:使用此示例:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'
Run Code Online (Sandbox Code Playgroud)
JΛY*_*ÐΞV 17
此问答线程中评分最高的答案在很大程度上是准确/有效的,但至少可以说是无组织的。然而,这里有一个解决方案;解决方案是在三个答案中找到的点点滴滴。为了提供一个单一帖子中存在的答案和解决方案,更易于阅读、解释、全面更有帮助和节省时间,我将尝试用清晰、简洁、有序的说明来回答问题涵盖了 Ubuntu 用户遇到的整个问题。此外,我将添加其他答案中未包含的必要信息,以了解正在解决的问题。就像这个问题不是 SQL 问题,它是一个 Ubuntu。使读者清楚持久性的问题是什么;“ROOT”用户在 Ubuntu 中没有密码。Ubuntu 用户使用 sudo 命令,并通过对几乎所有内容使用 sudo cmd 的许可来组织权限,也有例外,并且有一个 Ubuntu Root 用户选项,但现在在这里讨论这些事情无济于事。需要注意的重要事项如下:
首先你需要 NPM、NodeJS、MySql 和 NPM 的 MySql 驱动程序。如果您还没有它们,您甚至不应该阅读本文,因为您甚至无法 100% 知道您要解决的问题是否是这样的……
...如果您确实拥有列表中的所有内容,并且正在运行 Ubuntu 发行版,并且收到如下所示的错误身份验证消息和连接错误消息
那么您可能来对地方了。
要解决问题,首先创建一个空的“dot JS”文件进行测试,将其命名为“sqltest.js”或任何您喜欢的名称。
将下面的代码添加到其中。
在名为“createConnection”的方法中,有一个 JSON OBJ 参数,用于保存与 MySql 数据库服务器建立有效连接的凭据值。用户必须等于“root”,并且数据库必须存在。还要在以后的测试中向数据库添加一个测试表,其中包含一些 BS 数据。”
let mysql = require('mysql');
let connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '********',
database : 'DB_App_00',
});
connection.connect(function(err) {
if (err) {
return console.error('error: ' + err.message);
}
console.log('Connected to the MySQL server.');
});
Run Code Online (Sandbox Code Playgroud)
现在打开一个终端窗口,并进行典型的更新和升级,这很重要,这就是为什么每个人都要求你这样做。
~$: sudo apt update
~$: sudo apt upgrade
Run Code Online (Sandbox Code Playgroud)
let connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '********', database : 'DB_App_00', });
现在输入以下cmd
~$: sudo mysql -u root
Run Code Online (Sandbox Code Playgroud)
现在这是可以被认为是药物和/或解决问题的方法的步骤。您的终端应该是打开的,并且您应该在 MYSQL Server 中,在用户“root”下。终端应该让光标在空白的 mysql 命令行上闪烁。在 CMDL 中复制并粘贴:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'ChoosePassword';
mysql> FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)
下一部分很明显,将“选择密码”更改为您将记住的密码,同时将密码保留在单引号内。绝对不要更改其他内容,按 [ENTER]
如果您正确地遵循了这些步骤,您现在就拥有了一个带有自己密码的 MySQL 'ROOT USER'。通过在 Ubuntu CMDL 中复制并粘贴以下内容来测试它:
~$: mysql -u root -p
Run Code Online (Sandbox Code Playgroud)
……你应该进去了,现在退出。
mysql>exit
Run Code Online (Sandbox Code Playgroud)
let connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '********',
database : 'DB_App_00',
});
Run Code Online (Sandbox Code Playgroud)
现在使用 node 运行 node 测试文件
~$: node testsql.js
Run Code Online (Sandbox Code Playgroud)
如果它没有说连接你做错了什么,但如果一切顺利,你应该连接。在我开始工作之前需要付出一些努力,但是这个答案应该可以为您节省一些时间来阅读所有其他一半的书面答案。
小智 9
您可以更改现有用户以使用 mysql_native_password,或创建一个新用户,
CREATE USER 'new_user'@'%' IDENTIFIED WITH mysql_native_password BY '***';
GRANT USAGE ON *.* TO 'new_user'@'%';
ALTER USER 'new_user'@'%' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
GRANT ALL PRIVILEGES ON `new_user`.* TO 'new_user'@'%';
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)
用您的新用户名替换 new_user,并设置您的密码。
现在您可以使用 mysql 包从节点访问 mysql,
npm install mysql
Run Code Online (Sandbox Code Playgroud)
建议为此包使用池连接。
我认为某些 MySQL 版本的建立连接的身份验证有点混乱。我所要做的就是将这一行添加"insecureAuth" : true到CreateConnection(...)凭据中。
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '********',
database : 'vod_bill_database',
insecureAuth : true
});
Run Code Online (Sandbox Code Playgroud)
现在错误消失了,客户端连接成功。
小智 5
第一次运行此代码 ->
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Run Code Online (Sandbox Code Playgroud)
第二名
flush privileges;
Run Code Online (Sandbox Code Playgroud)
您可以更改您使用的包,使用 mysql2 而不是 mysql 我有同样的问题,mysql2 为我工作
npm 我 mysql2
| 归档时间: |
|
| 查看次数: |
31881 次 |
| 最近记录: |