【发布时间】:2019-03-07 16:11:42
【问题描述】:
设置
- Expressjs (Node) 在 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 上查看了许多答案。他们中的大多数人使用(example):
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 gist 的连接:https://gist.github.com/h3d0/aea7b48144d08403d69e2da3ccdcdde7
连接MySQL后,运行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'foo123';
FLUSH PRIVILEGES;
重新启动 Node.js 和 MySQL 容器,但没有任何反应。
【问题讨论】:
-
FLUSH PRIVILEGES;? -
试过了。并尝试添加新用户。
-
此时这基本上是一个常见问题解答。
update mysql.user set plugin = 'mysql_native_password' where user = 'root'; flush privileges;stackoverflow.com/questions/2101694/… -
像这样的 @dossy 设置插件似乎可以解决问题 - 我的两个 root 用户都设置了
mysql_native_password。但是在那之后,我再也不能连接到 MySQL:ERROR 1130 (HY000): Host '172.17.0.3' is not allowed to connect to this MySQL server. -
您创建的用户是
root@'172.17.0.3'还是root@'%'?否则,我认为默认值是root@'localhost',如果你没有在运行 MySQL 的 docker 容器中运行代码,那么你就没有从 localhost 连接。