linux 系统下,使用 docker 启动 mysql 后,通过 sqlyog 连接 mysql 报“错误号码2058“
一、错误描述:
在 ubuntu 系统上,刚安装的 docker 启动 mysql 后,想通过图形界面 SQLyong 等工具连接 mysql 出现“错误号码2058”,如上图。
docker run -di --name=skywalking_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123 mysql# 或者:
docker run -di --name=skywalking_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=12311 mysql8.0
出现这个问题,是因为 MySQL 从 8.0 版本开始,使用 caching_sha2_password 授权插件,进行加密,而你的 SQLyog 版本无法识别该加密方式。
二、解决方法:
1、更改 mysql 加密方式,修改用户的授权插件。
1.1 查询 mysql 的 id
docker ps
1.2通过 docker 进入 mysql
# 命令:
docker exec -it <id号> bash# 示例:(2ac83794fa10 是 查询到的 id )
docker exec -it 2ac83794fa10 bash# 登录 mysql
mysql -u root -p
# 输入密码,登录。
1.3、更改 mysql 密码规则
use mysql;alter user 'root'@'%' identified with mysql_native_password by '123';
2、如是不能更改,可以试试如下方法:
--- 连接权限数据库
mysql> use mysql; --- 查看 user 主机名:
mysql> select user, host from user; --- 如果 root 用户的 host 是 localhost 本地用户,就使用:
--- 低版本 mysql 5.x
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘123’;
--- 高版本 mysql 8.x
mysql> alter user 'root'@'localhost' identified with mysql_native_password by '123';--- 如果 root 用户的 host 是 % 网络用户,就使用:
--- 低版本 mysql 5.x
ALTER USER ‘root’@‘%’ IDENTIFIED BY ‘123’;
--- 高版本 mysql 8.x
mysql> alter user 'root'@'%' identified with mysql_native_password by '123';--- 还可以查看 再次查看 mysql 数据库中 user 表的 plugin 字段
mysql> select user, host, plugin from user;--- 如果发现 root 用户是 caching_sha2_password 的插件,
而不是 mysql_native_password 插件,可以把它改成 mysql_native_password 插件。
mysql> update user set plugin='mysql_native_password' where user='root';--- 也可以把 root 用户的 host 更改成 localhost 进行相应的操作。
mysql> update user set host='localhost' where host='%' and user='root';--- 更新用户: --- 低版本 mysql 5.x
mysql> update user set password=password('123') where user='test' and host='localhost'; --- 高版本 mysql 8.x
mysql> update user set authentication_string='123' where user='root';
Query OK, 1 row affected (0.05 sec)
Rows matched: 1 Changed: 1 Warnings: 0--- 刷新权限:
mysql> flush privileges;
3、修改 mysql 的配置文件 my.cnf 或 my.ini 。
# windows 系统(以下是默认安装位置,可以根据自已实际路径查找)
mysql --help | findstr "my.ini"C:\WINDOWS\my.ini
C:\WINDOWS\my.cnf
C:\my.ini
C:\my.cnf # linux 系统 或 Docker以下是默认安装位置)
mysql --help | grep 'my.cnf'/etc/my.cnf
/etc/mysql/my.cnf
/usr/etc/my.cnf
~/.my.cnf# 在配置文件的 [mysqld] 下添加如下配置:
default-authentication-plugin=mysql_native_password
4、如果问题依然存在,可以考虑直接下载新版本的 SQLyong 。
从 SQLyog 13.1.3开始,已经支持 caching_sha2_password 授权插件。
SQLyong 各个版本下载地址:
https://github.com/webyog/sqlyog-community/wiki/Downloads