我已经设置了一个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'
});
有什么想法吗?感谢
答案 0 :(得分:36)
现在8.0版本是更改插件的方法: 使用此示例:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'
答案 1 :(得分:8)
答案 2 :(得分:6)
此问题解答中评分最高的答案在大多数情况下都是准确/有效的,但至少可以说是无组织的。但是,这里有一个解决方案。解决的办法是在三个答案中找到零碎的碎片。为了提供单个帖子中存在的答案和解决方案,以使其更易于阅读,解释,并且更全面,更有用,更节省时间,我将尝试使用清晰,简洁,有序的一组说明来回答问题。涵盖了Ubuntu用户遇到的整个问题。另外,我将添加必要的信息(未包含在其他答案中),以了解要解决的问题。这样的问题不是SQL问题,而是Ubuntu。使读者了解持久性存在的问题; “ ROOT”用户在Ubuntu中没有密码。 Ubuntu用户使用sudo命令,并通过使用sudo cmd的许可来组织权限,几乎所有事情都有,有例外,并且有一个Ubuntu Root User选项,但是在这里讨论这些事情无济于事,对现在。需要注意的重要事项如下:
首先,您需要NPM,NodeJS,MySql和NPM的MySql驱动程序。如果您还没有它们,那么您甚至都不应该读这本书,因为您甚至无法100%知道您要解决的问题是这个...
...如果您确实列出了所有内容,并且正在运行Ubuntu发行版,并且正在收到类似于以下内容的错误验证消息和Connection err消息,则为
那么您可能就在正确的地方。
要解决此问题,请先创建一个空的“ 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.');
});
现在打开一个终端窗口,并进行典型的更新和升级,这一点很重要,这就是每个Tut都要求您这样做的原因。
~$: sudo apt update
~$: sudo apt upgrade
让连接= mysql.createConnection({ 主机:'localhost', 用户:“ root”, 密码:'********', 数据库:“ DB_App_00”, });
现在键入以下cmd
~$: sudo mysql -u root
现在是可以被视为药物和/或解决问题的步骤。您的终端应处于打开状态,并且应位于用户“ root”下的MYSQL Server内部。终端应该使光标在空白的mysql命令行上闪烁。在CMDL中复制并粘贴以下内容:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'ChoosePassword';
mysql> FLUSH PRIVILEGES;
下一部分很明显,将“ ChoosePassword”更改为您将记住的密码,同时将密码放在单引号内。完全没有其他更改,请按[ENTER]
如果正确执行了这些步骤,则您现在拥有一个拥有自己密码的MySQL MySQL“ ROOT USER”。通过将以下内容复制并粘贴到Ubuntu CMDL进行测试:
~$: mysql -u root -p
...您应该进入,现在退出。
mysql>exit
let connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '********',
database : 'DB_App_00',
});
现在使用节点运行节点测试文件
~$: node testsql.js
如果没有显示已连接,则说明您做错了什么,但如果一切顺利,则应连接。我花了点力气才开始工作,但是这个答案应该为您节省阅读其他所有书面答案的时间。
答案 3 :(得分:5)
您可以更改您正在使用的包 使用 mysql2 代替 mysql 我有同样的问题,mysql2 为我工作
npm 和 mysql2
答案 4 :(得分:4)
我认为在某些MySQL版本中,他们对建立连接的认证有点混乱。我所要做的就是添加一行" insecureAuth:true"我的连接尝试。
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '********',
database : 'vod_bill_database',
insecureAuth : true
});
现在工作正常。
答案 5 :(得分:4)
您可以更改现有用户以使用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;
将new_user替换为您的新用户名,然后设置密码。
现在您可以使用mysql程序包从节点访问mysql
npm install mysql
建议对此程序包使用池连接。
答案 6 :(得分:2)
第一次运行此代码->
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
第二个
flush privileges;
答案 7 :(得分:0)
尝试使用旧版本的mysql,如5.6.40 ,它默认使用SHA256_password auth,其中新版本为8.0。默认使用sha2_password auth,它更安全,并抛出 身份验证协议错误 。 MYSQL installer 5.6.40
答案 8 :(得分:0)
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '********',
database : 'vod_bill_database',
port : 3308
});
我有同样的错误,因为我将phpmyadmin中的端口从3306更改为3308,因此我也必须编写端口:3308并开始工作。
答案 9 :(得分:0)
感谢@Vinayak Shedgeri 我通过使用“ MySQL Installer”重新配置“ MySQL Server”步骤解决了该错误。 steps with the "MySQL Installer
答案 10 :(得分:0)
为了克服此错误,请使用以下代码:
var connectionString = 'mysql://*root:*password@*localhost/*database?charset=utf8_general_ci&timezone=-0700';
var connection= mysql.createConnection(connectionString);
,但是请确保根据设置更改了connectionString中的*标记。
答案 11 :(得分:0)
黄色的兄弟!
// mysql.ts
const pool = mysql.createPool({
connectionLimit: 10,
host: "localhost",
user: "root",
password: "password",
database: "rest-resume-api",
});
然后我有一个docker-compose文件,例如
# docker-compose.yml
version: '3.3'
services:
db:
image: mysql
restart: always
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_DATABASE: 'rest-resume-api'
MYSQL_USER: 'root'
MYSQL_ROOT_PASSWORD: 'password'
ports:
- '3306:3306'
expose:
- '3306'
volumes:
- my-db:/var/lib/mysql2
volumes:
my-db:
答案 12 :(得分:0)
只需在MySQL上创建一个新用户
CREATE USER 'foo'@'localhost' IDENTIFIED WITH mysql_native_password BY 'bar';