【问题标题】:Mysql Error - 1251 'ER_NOT_SUPPORTED_AUTH_MODE'Mysql 错误 - 1251 'ER_NOT_SUPPORTED_AUTH_MODE'
【发布时间】:2020-06-09 13:04:51
【问题描述】:

我知道这个问题已经在 SO 中得到解答,但建议的修复对我不起作用!

错误:

      throw err; // Rethrow non-MySQL errors
      ^

Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
    at Handshake.Sequence._packetToError (C:\Dev\Programmierung\FitnessAppExpo\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14)
    at Handshake.ErrorPacket (C:\Dev\Programmierung\FitnessAppExpo\node_modules\mysql\lib\protocol\sequences\Handshake.js:123:18)
    at Protocol._parsePacket (C:\Dev\Programmierung\FitnessAppExpo\node_modules\mysql\lib\protocol\Protocol.js:291:23)
    at Parser._parsePacket (C:\Dev\Programmierung\FitnessAppExpo\node_modules\mysql\lib\protocol\Parser.js:433:10)
    at Parser.write (C:\Dev\Programmierung\FitnessAppExpo\node_modules\mysql\lib\protocol\Parser.js:43:10)
    at Protocol.write (C:\Dev\Programmierung\FitnessAppExpo\node_modules\mysql\lib\protocol\Protocol.js:38:16)
    at Socket.<anonymous> (C:\Dev\Programmierung\FitnessAppExpo\node_modules\mysql\lib\Connection.js:88:28)
    at Socket.<anonymous> (C:\Dev\Programmierung\FitnessAppExpo\node_modules\mysql\lib\Connection.js:526:10)
    at Socket.emit (events.js:223:5)
    at addChunk (_stream_readable.js:309:12)
    --------------------
    at Protocol._enqueue (C:\Dev\Programmierung\FitnessAppExpo\node_modules\mysql\lib\protocol\Protocol.js:144:48)
    at Protocol.handshake (C:\Dev\Programmierung\FitnessAppExpo\node_modules\mysql\lib\protocol\Protocol.js:51:23)
    at Connection.connect (C:\Dev\Programmierung\FitnessAppExpo\node_modules\mysql\lib\Connection.js:116:18)
    at Object.<anonymous> (C:\Dev\Programmierung\FitnessAppExpo\server\server.js:29:5)
    at Module._compile (internal/modules/cjs/loader.js:955:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:991:10)    
    at Module.load (internal/modules/cjs/loader.js:811:32)
    at Function.Module._load (internal/modules/cjs/loader.js:723:14)
    at Function.Module.runMain (internal/modules/cjs/loader.js:1043:10)
    at internal/main/run_main_module.js:17:11 {
  code: 'ER_NOT_SUPPORTED_AUTH_MODE',
  errno: 1251,
  sqlMessage: 'Client does not support authentication protocol requested by server; consider upgrading MySQL client',
  sqlState: '08004',
  fatal: true
}

我有一个 Xampp 服务器在 localhost 上使用 myphpadmin 运行。我试图在 myphpadmin 中插入这段代码:

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

但是如果我尝试使用它,它会在 phpmyadmin 中给我一个错误:

在开始新的 ALTER 操作之前缺少“,”!

第二个声明:

未知的 ALTER 操作(附近)

当我想在 phpmyadmin 中使用或执行这个命令时,我需要做些什么特别的事情吗?因为 ALTER Query 的编写方式不允许我执行它..

节点(快递)代码:

var mysql = require("mysql");
var express = require("express");
var session = require("express-session");
var app = express();
var cors = require("cors");

var bodyParser = require("body-parser");
app.use(bodyParser.json({ limit: "50mb" }));
app.use(bodyParser.urlencoded({ limit: "50mb", extended: true }));

app.use(
  session({
    secret: "ssshhhhh",
    saveUninitialized: true, // (default: true)
    resave: true
  })
);

app.use(cors({ origin: ["http://localhost:4200"], credentials: true }));

var con = mysql.createConnection({
  host: "localhost",
  // host: "127.0.0.1:3307",
  user: "root",
  password: "",
  database: "fitness_app"
});

con.connect(err => {
  if (err) throw err;
  console.log("Database connected -> ");
});

var server = app.listen(8090, () => {
  var host = "localhost";
  var port = server.address().port;
  console.log("App listening at http://%s:%s", host, port);
}); 

~褪色

【问题讨论】:

  • node-mysql 版本? MySQL服务器版本? SHOW CREATE USER root@localhost?
  • mysql version is 2.18.1 express version: 4.17.1 // localhost users 我不创建他们但他们存在于 db 中有 3 个 root 用户
  • SELECT VERSION() 显示服务器版本。 SHOW CREATE USER 显示用户定义的插件。 any of these issues 是不是很眼熟?
  • 这是我选择版本后的日志:10.4.11-MariaDB 这是创建用户:CREATE USER 'root'@'localhost'
  • 如果包含完整信息,它可能会显示一个 auth_socket 插件。这似乎是现有的 nodejs 错误之一。建议创建一个新用户以供应用程序使用。软件包更新取决于 root 用户,因此最好保留它。 MariaDB 和 mysql 有效地支持无限数量的数据库用户。

标签: javascript mysql node.js express


【解决方案1】:

在MYSQL Workbench中执行以下查询

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

其中 root 作为您的用户 localhost 作为您的 URL 和密码作为您的密码

然后运行此查询以刷新权限:

flush privileges;

完成后尝试使用节点连接。

如果这不起作用,请尝试不使用 @'localhost' 部分。

【讨论】:

    猜你喜欢
    • 2022-11-13
    • 2018-05-27
    • 2017-12-10
    • 2019-03-07
    • 2019-11-03
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 2018-12-19
    相关资源
    最近更新 更多