解决 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+后,无论连接用户使用什么授权插件,都可连接上。

相关推荐
KellenKellenHao4 小时前
MySQL数据库主从复制
数据库·mysql
一只fish5 小时前
MySQL 8.0 OCP 1Z0-908 题目解析(16)
数据库·mysql
叁沐7 小时前
MySQL 07 行锁功过:怎么减少行锁对性能的影响?
mysql
Java烘焙师7 小时前
架构师必备:业务扩展模式选型
mysql·elasticsearch·架构·hbase·多维度查询
飞翔的佩奇8 小时前
Java项目:基于SSM框架实现的忘忧小区物业管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告】
java·数据库·mysql·vue·毕业设计·ssm框架·小区物业管理系统
@Ryan Ding8 小时前
MySQL主从复制与读写分离概述
android·mysql·adb
feifeigo12315 小时前
升级到MySQL 8.4,MySQL启动报错:io_setup() failed with EAGAIN
数据库·mysql·adb
A__tao19 小时前
一键将 SQL 转为 Java 实体类,全面支持 MySQL / PostgreSQL / Oracle!
java·sql·mysql
一只fish20 小时前
MySQL 8.0 OCP 1Z0-908 题目解析(17)
数据库·mysql
叁沐21 小时前
MySQL 06 全局锁和表锁:给表加个字段怎么有这么多阻碍?
mysql