错误:ER_NOT_SUPPORTED_AUTH_MODE:客户端不支持服务器请求的身份验证协议;考虑升级MySQL客户端

时间:2018-05-03 07:31:19

标签: mysql node.js express

尝试使用以下代码连接到MySQL数据库。

var mysql      = require('mysql');
var connection = mysql.createConnection({
    host     : 'localhost',
    user     : 'root',
    password : 'pass',
    database : 'my_db',
    insecureAuth : true
});

connection.connect();

connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
    if (error) throw error;
    console.log('The solution is: ', results[0].solution);
});

connection.end();

但我得到以下错误:

错误:ER_NOT_SUPPORTED_AUTH_MODE:客户端不支持服务器请求的身份验证协议;考虑升级MySQL客户端

我在本地安装了MySQL-installer-community-8.0.11.0。

我是否需要安装任何其他连接器才能连接数据库?

5 个答案:

答案 0 :(得分:2)

我昨天用我的docker容器和mysql + nodejs遇到了同样的问题。 到目前为止我还没找到修复程序,但它有新的mysql版本(8.X)。 在我用版本5重新安装mysql后,一切都很适合我。

答案 1 :(得分:1)

如果我们在安装过程中选择强密码加密,则会遇到一些问题或者我们需要对Mysql(8.x)进行一些设置更改。如果我们在MySQL(8.x)安装期间选择MySQL(5.x)的传统密码加密,MySQL(8.x)连接可以正常工作。

答案 2 :(得分:0)

我会尝试删除insecureAuth:true行,然后重试。

答案 3 :(得分:0)

我正在使用https://hub.docker.com/r/mysql/mysql-server/

在文档中说

  

MYSQL_ONETIME_PASSWORD:当变量为true时(即它的   默认状态,除非设置了MYSQL_ROOT_PASSWORD或   MYSQL_ALLOW_EMPTY_PASSWORD设置为true),root用户的密码   设置为已过期,必须更改后才能使用MySQL   一般。仅MySQL 5.6和更高版本支持此变量。

尝试为您的Docker环境设置MYSQL_ROOT_PASSWORD。 您可能还需要更改用户的身份验证模式。

> mysql -u root -p

ALTER USER 'username'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

为我工作。

编辑: 要检查设置了什么身份验证,请执行以下操作:

SELECT user, plugin FROM mysql.user WHERE user = 'username';

答案 4 :(得分:0)

我遇到了同样的问题,该解决方案对我有用:

  1. 转到您的MySQL工作台,然后单击当前数据库。
  2. 在“导航器”窗口(左侧)中,单击Users and Privileges
  3. 点击用户列表底部的Add Account
  4. 给它另一个登录名(例如node_test)。
  5. 将身份验证类型设置为Standard
  6. Limit to Host Matching设置为localhost。
  7. 设置新密码(例如coding-is-awesome)。
  8. 结果代码如下:

    var mysql = require("mysql");
    
    var con = mysql.createConnection({
      host: "localhost",
      user: "node_test",
      password: "coding-is-awesome"
    });
    
    con.connect(function(err) {
      if (err) {
        console.log("Failed to connect");
        throw err;
      } else {
        console.log("Connected!");
      }
    });