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