Node.js和MySQL - 错误:1251 - 客户端不支持服务器请求的身份验证协议;考虑升级MySQL客户端。

13

现在我只有这段代码:

const Sequelize = require('sequelize');
const sequelize = new Sequelize('database', 'root', 'passwd', {
  host: 'localhost',
  dialect: 'mysql',

    // http://docs.sequelizejs.com/manual/tutorial/querying.html#operators
  operatorsAliases: false
});
sequelize
  .authenticate()
  .then(() => {
    console.log('Connection has been established successfully.');
  })
  .catch(err => {
    console.error('Unable to connect to the database:', err);
  });

但是当我尝试运行.js文件时,我遇到了这个错误。我已经尝试了很多解决方案,包括我发现的更常见的方法,但它没有起作用。所以现在我不知道该怎么办。有人可以帮帮我吗?

谢谢


你的服务器配置了哪些认证模式? - Akshara
缓存_sha2_password - ifhy
4个回答

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

对我有效。root密码已更改为“password”


这对我也起作用了。我认为这是由于新版本的mysql中使用SHA256进行密码存储所致。 - Vijay Pant
1
我正在使用Docker容器工作,因为我需要连接到不同的主机名,所以我需要在查询中将localhost更改为。它有效了! - etudor
谢谢你的回答,它对我很有帮助,也节省了很多时间。谢谢。 - Akhil S

3
将插件更改为mysql_native_password可能会解决问题!
use mysql;
update user set authentication_string=password(''), plugin='mysql_native_password' where user='root';

3
实际上,这是关于将插件更改为mysql_native_password的方式,但不是之前我提到的那种方式,因为我在之前的帖子中提到尝试过那种方式但语法错误。我在MySQL文档中进行了搜索,并找到了这个: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';这个方法行得通!虽然还是感谢你的帮助 :) - ifhy
只是为了澄清,语法可能会有所不同,在我的情况下,它是 ... set authentication_string='password', ... - ganjim

1

基本上,当我尝试连接到Mysql Query Browser时,我遇到了问题。

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

对我很有用。root密码已更改为'root'


1
我发现导致问题的原因是参数不正确。
{ database: 'abc',
  username: undefined,
  password: 'efsefs',
}

用户名未定义,但错误提示为“考虑升级MySQL客户端”。将用户名修改为正确的值即可解决该错误。


谢谢。这就是问题所在。环境变量被命名为USER,但没有加载到process.env对象中。我将其更改为MYSQL_USER,它就变得可用了,连接也成功了。 - Rohan Hussain

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