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

相关推荐
金书世界4 分钟前
使用PHP+html+MySQL实现用户的注册和登录(源码)
开发语言·mysql·php
Dxy12393102167 分钟前
MySQL如何避免隐式转换
开发语言·mysql
xdpcxq102921 分钟前
MySQL 5.6 2000 万行高频读写表新增字段
数据库·mysql
qinyia1 小时前
在Ubuntu 22.04.5 LTS上安装MySQL 8并设置root密码的完整协作流程
mysql·ubuntu·adb
晔子yy1 小时前
MySQL存储引擎全面解析
数据库·mysql
予枫的编程笔记1 小时前
【MySQL飞升篇】MySQL主从复制灵魂三问:Binlog怎么选?线程如何工作?延迟怎么解?
mysql·性能优化·binlog·主从复制·数据库运维·并行复制·延迟解决
银发控、9 小时前
MySQL联合索引
数据库·mysql
予枫的编程笔记9 小时前
【MySQL修炼篇】从踩坑到精通:事务隔离级别的3大异常(脏读/幻读/不可重复读)解决方案
数据库·mysql·后端开发·数据库事务·事务隔离级别·rr级别·脏读幻读不可重复读
霖霖总总13 小时前
[小技巧60]深入解析 MySQL Online DDL:MySQL Online DDL、pt-osc 与 gh-ost 机制与最佳实践
数据库·mysql
怣5015 小时前
[特殊字符] MySQL数据表操作完全指南:增删改查的艺术
数据库·mysql·adb