龙空技术网

使用 docker 启动 mysql 后,通过 sqlyog 连接 mysql 报“错误号码2058“

段子手168 46

前言:

现在姐妹们对“mysql修改了加密规则了怎么办”可能比较珍视,各位老铁们都想要知道一些“mysql修改了加密规则了怎么办”的相关内容。那么小编也在网上汇集了一些关于“mysql修改了加密规则了怎么办””的相关内容,希望姐妹们能喜欢,各位老铁们一起来了解一下吧!

#电脑系统损坏,开机很慢怎么办?#

# linux 系统下,使用 docker 启动 mysql 后,通过 sqlyog 连接 mysql 报“错误号码2058“

## 一、错误描述:

在 ubuntu 系统上,刚安装的 docker 启动 mysql 后,想通过图形界面 SQLyong 等工具连接 mysql 出现“错误号码2058”,如上图。

```bash

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

```bash

docker ps

```

#### 1.2通过 docker 进入 mysql

```bash

# 命令:

docker exec -it <id号> bash

# 示例:(2ac83794fa10 是 查询到的 id )

docker exec -it 2ac83794fa10 bash

# 登录 mysql

mysql -u root -p

# 输入密码,登录。

```

#### 1.3、更改 mysql 密码规则

```bash

use mysql;

alter user 'root'@'%' identified with mysql_native_password by '123';

```

### 2、如是不能更改,可以试试如下方法:

```bash

--- 连接权限数据库

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 。

```bash

# 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 各个版本下载地址:

标签: #mysql修改了加密规则了怎么办