mysql - MySQL 8:ER_NOT_SUPPORTED_AUTH_MODE
问题描述
设置
- 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'
});
得到:
错误:ER_NOT_SUPPORTED_AUTH_MODE:客户端不支持服务器请求的身份验证协议;考虑升级 MySQL 客户端
在 StackOverflow 上检查了很多答案。他们中的大多数使用(示例):
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MyNewPass';
但是我得到:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MyNewPass'; 查询正常,0 行受影响(0.06 秒)
服务器仍然不想连接。使用 MySQL 5.7 可以正常工作。
任何想法如何为 MySQL 8 解决这个问题?
添加:
只是为了清楚:
- 使用官方 MySQL Docker:https ://hub.docker.com/_/mysql/ 。
- server.js 要点:https ://gist.github.com/h3d0/8d021d25892f34976d806485f18479f2
- 运行 MySQL Docker 要点:https ://gist.github.com/h3d0/505f41a633f571e12117b32638035412
- 连接到 MySQL Docker 要点:https ://gist.github.com/h3d0/aea7b48144d08403d69e2da3ccdcdde7
连接到 MySQL 后,运行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'foo123';
FLUSH PRIVILEGES;
重新启动 Node.js 和 MySQL 容器,没有任何反应。
解决方案
我希望您没有按字面意思使用 value 'MyNewPass'
,但它确实看起来像它。这应该是一个示例占位符。
在您的情况下,您必须这样做:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'foo123';
推荐阅读
- javascript - 如何在网页中显示 JSON 结果?
- vue.js - 如何使用 Jest 修复测试的 Apollo 设置?
- swift - 在展开快照时发现 nil 但它只是随机发生
- javascript - 如何为 Sails 中的图像生成外部 url?
- css - 如何使用css将最后一个div放在包含它的div末尾的div中?
- php - 在 vuejs 中设置 laravel 变量
- swift - 删除计划的本地通知
- ruby-on-rails - Przychody#new 中的 ActionController::UrlGenerationError
- swift - 为什么我们在 Combine 中没有 tryFlatMap 运算符?
- javascript - TypeORM 插入与relationId