连接 MySQL 8.0 时,加密方式不兼容的解决方法
现象
解决方案
- 首先找到当前数据库用户root的加密规则
mysql>use mysql;
mysql>select user, host, plugin from user
- 修改加密规则为“mysql_native_password”
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
注: password 替换为 root 的密码; 或者直接更新这一行 pluggin字段 的值为 “mysql_native_password”
修改my.cnf配置文件,加入
+ default-authentication-plugin=mysql_native_password
但是这个配置参数只对新的用户起作用,对于老的,比如root那就要重新设置一下密码
对与那个用户使用了哪种认证插件,你可以去mysql的用户表去查看plugin字段
mysql -u root -p
use mysql
select * from user;
接着我们修改root的认证插件
ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
之后就好了.
完成后效果如下:
更为优雅的解决方案
又重新回到了 MySQL 官方在docker的仓库中,仔细的阅读了一遍官方的说明。
其实,我们在启动MySQL 容器的时候,是可以修改一些设置的。主要有2种方式。
- 自定义配置文件,并 mount 到 container里。这样在MySQL启动时,会加载我们的配置文件。
- 启动MySQL容器是传入CMD,通过命令修改默认加密规则(下面绿色部分)
docker run -d -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=weather_db -p 3307:3306 --name test-mysql --restart always -v /home/ct/mysql/data:/var/lib/mysql
mysql:8.0.12 --default-authentication-plugin=mysql_native_password