解决 SQLyog 连接 MySQL8.0+ 报错:错误号码2058

文章目录

本文将总结如何解决 SQLyog 连接 MySQL8.0+ 时报错:错误号码2058

一、问题现象

使用SQLyog连接MySQL8.0+数据库时,报错:
错误号码2058 Plugin caching_sha2_password could not be loaded

二、原因分析

出现这个问题,是因为 MySQL 从 8.0 版本开始,新增了caching_sha2_password授权插件,并且新建用户时默认使用该插件进行加密,而你的 SQLyog 版本无法识别该加密方式加密的密码。
(多数情况下是你的SQLyog版本过时了,新的SQLyog已支持识别caching_sha2_password加密方式的密码)

MySQL :: MySQL 8.0 Reference Manual :: 5.1.8 Server System Variables

三、解决方案

1. 方案1:更新SQLyog版本

查看你的SQLyog安装路径下,是否有caching_sha2_password.dll动态库,如果没有则说明你的SQLyog版本,不支持通过caching_sha2_password加密的用户进行连接数据库。

查看了一下SQLyog的发布历史:Version History - 2019 - SQLyog Knowledge Base (webyog.com)

SQLyog 13.1.3开始,才支持caching_sha2_password授权插件

如果你需要更新SQLyog,你可能需要 SQLyog 各版本下载与安装

2. 方案2:修改用户的授权插件

使用有mysql.user表权限的用户连接mysql并执行如下命令:

bash 复制代码
mysql> ALTER USER 'sqlyog'@'localhost' IDENTIFIED WITH mysql_native_password BY '1234qwer';
Query OK, 0 rows affected (0.03 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.03 sec)

mysql> SELECT user,host,plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | caching_sha2_password |
| sqlyog           | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
5 rows in set (0.00 sec)

解释:
ALTER USER 'sqlyog'@'localhost' IDENTIFIED WITH mysql_native_password BY '1234qwer',使用mysql_native_password 授权插件更新用户密码,sqlyog@localhost换为替换为你自己的user及host

3. 方案3:修复my.cnf 或 my.ini配置文件

查找配置文件(如果你的mysql是安装在Window下):

bash 复制代码
C:\Users\Administrator>mysql --help | findstr "my.ini"
C:\WINDOWS\my.ini C:\WINDOWS\my.cnf C:\my.ini C:\my.cnf D:\Chen\MySoft\mysql-8.1.0-winx64\my.ini D:\Chen\MySoft\mysql-8.1.0-winx64\my.cnf

查找配置文件(如果你的mysql是安装在Linux或docker里):

bash 复制代码
sh-4.4# mysql --help | grep 'my.cnf'
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf

按顺序找配置文件,找到后打开配置文件,在配置文件的[mysqld]下添加如下配置:

bash 复制代码
default-authentication-plugin=mysql_native_password

然后重启mysql服务

Windows 上重启服务

bash 复制代码
net stop mysql
net start mysql

Linux 上重启服务

bash 复制代码
systemctl stop mysqld
systemctl start mysqld

Docker 上重启mysql容器

bash 复制代码
docker restart mysql81

mysql81使用你的 mysql容器名称或ID替换

重启完成后,mysql服务使用的默认加密授权插件就成了mysql_native_password,然后新创建的用户如果不指定授权插件,那么创建完成后就使用默认插件加密了。

bash 复制代码
mysql> show variables like 'default_authentication_plugin';
+-------------------------------+-----------------------+
| Variable_name                 | Value                 |
+-------------------------------+-----------------------+
| default_authentication_plugin | mysql_native_password |
+-------------------------------+-----------------------+
1 row in set (0.01 sec)

mysql> CREATE USER 'sqlyog'@'%' IDENTIFIED BY '1234qwer';
Query OK, 0 rows affected (0.04 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'sqlyog'@'%';
Query OK, 0 rows affected (0.02 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql> SELECT user,host,plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| root             | %         | caching_sha2_password |
| sqlyog           | %         | mysql_native_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
6 rows in set (0.00 sec)

此时再使用新创建的用户,就可以连接mysql8.0+的数据库了。

注意:对于已有的用户,如果使用的仍是caching_sha2_password加密方式,那么仍无法用SQLyog连接,你可以使用方案2,重新设置其加密方式及密码。

四、最后总结

  1. 严格来说上述方案3方案2是一样的(不太推荐方案3)。
    方案3仅是将服务器默认的授权插件改为了mysql_native_password,它仅对新创建的用户起作用(前提是创建用户时没有指定授权插件),并不会影响已有的用户的加密方式。如果想使用已有用户连接mysql,需使用方案2重新设置其授权插件及密码。
  2. 方案1更新SQLyog的方案还是值得尝试的,毕竟是一劳永逸的事儿。更新SQLyog 13.1.3+后,无论连接用户使用什么授权插件,都可连接上。

相关推荐
·云扬·1 小时前
MySQL Redo Log落盘机制深度解析
数据库·mysql
码界筑梦坊1 小时前
330-基于Python的社交媒体舆情监控系统
python·mysql·信息可视化·数据分析·django·毕业设计·echarts
千寻技术帮2 小时前
10327_基于SpringBoot的视频剪辑咨询网站
mysql·源码·springboot·代码·视频咨询
洛豳枭薰3 小时前
MySQL 梳理
数据库·mysql
剩下了什么11 小时前
MySQL JSON_SET() 函数
数据库·mysql·json
java搬砖工-苤-初心不变12 小时前
MySQL 主从复制配置完全指南:从原理到实践
数据库·mysql
WangYaolove131413 小时前
基于python的在线水果销售系统(源码+文档)
python·mysql·django·毕业设计·源码
霖霖总总15 小时前
[小技巧66]当自增主键耗尽:MySQL 主键溢出问题深度解析与雪花算法替代方案
mysql·算法
海奥华217 小时前
mysql索引
数据库·mysql
javachen__17 小时前
mysql新老项目版本选择
数据库·mysql