MySQL 8:ER_NOT_SUPPORTED_AUTH_MODE

0le*_*leg 7 mysql node.js

设置

  • Expressjs(节点)在Windows 10 PC 上的localhost:3000上运行。
  • MySQL 通过docker-machine在 192.168.99.100:3306 的 Docker 容器中运行。

问题

尝试使用以下方法将服务器连接到 MySQL 时:

const connection = mysql.createConnection({
  host: '192.168.99.100',
  user: 'root',
  password: 'foo123',
  database: 'foo_db'
});
Run Code Online (Sandbox Code Playgroud)

获得:

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

在 StackOverflow 上检查了很多答案。他们中的大多数使用(示例):

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MyNewPass';
Run Code Online (Sandbox Code Playgroud)

但是我得到:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MyNewPass'; 查询正常,0 行受影响(0.06 秒)

而服务器仍然不想连接。使用 MySQL 5.7 工作正常。

任何想法如何为 MySQL 8 解决这个问题?


添加:

只是要清楚:

连接到 MySQL 后,运行:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'foo123';
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

重新启动 Node.js 和 MySQL 容器,没有任何反应。

小智 6

我希望你不是从字面上使用 value 'MyNewPass',但它确实看起来像它。那应该是一个示例占位符。

在您的情况下,您必须执行以下操作:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'foo123';
Run Code Online (Sandbox Code Playgroud)