mysql 错误 2061_主从复制报错2061:Authentication plugin 'caching_sha2_password' reported error:Authentication...

本文针对MySQL8.0中主从复制遇到的2061错误进行了详细的故障排查与解决,介绍了caching_sha2_password插件的安全特性,并提供了三种可行的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主从复制报错2061:

出现故障

在MySQL8.0中,创建主从复制使用的用户:

mysql> CREATE USER 'repl'@'%' identified by 'XXXXXX'

mysql> GRANT REPLICATION SLAVE ON *.* TO `repl`@`%`

在从库配置好change master 信息后,start slave,查看复制状态,如下所示:

Last_IO_Errno:2061

Last_IO_Error:error connecting to mater 'repl@118.31.127.96:3307' - retry-time:60 retries:1 massage:Authentication plugin 'caching_sha2_password' reported error:Authentication require secure connection.

caching_sha2_password

在MySQL8.0之前,身份验证的插件是mysql_native_password,在MySQL 8.0中,caching_sha2_password 是默认的身份验证插件,安全性更高。

在MySQL中,系统状态变量Rsa_public_key,此值是sha256_password身份验证插件用于基于RSA密钥对的密码交换的公用密钥 。对于使用该sha256_password 插件的客户端,连接到服务器时,密码永远不会以明文形式公开。密码传输的方式取决于是否使用安全连接或RSA加密:

1.如果连接安全,则无需使用RSA密钥对。这适用于使用TLS加密的连接。密码以明文形式发送,但由于连接安全,因此无法监听。

2.如果连接不安全,并且RSA密钥对可用,则该连接将保持未加密状态。这适用于未使用TLS加密的连接。RSA仅用于客户端和服务器之间的密码交换,以防止密码监听。服务器收到加密的密码后,便对其进行解密。加密中使用加扰来防止重复攻击。

3.如果未使用安全连接且RSA加密不可用,则连接尝试将失败,因为无法发送密码而不将密码公开为明文。

由该 —server-public-key-path选项命名的文件中的公共密钥值 应与由 caching_sha2_password_public_key_path系统变量命名的服务器端文件中的密钥值相同 。如果密钥文件包含有效的公共密钥值,但该值不正确,则会发生拒绝访问的错误。如果密钥文件不包含有效的公共密钥,则客户端程序无法使用它。

故障原因

通过上面对插件caching_sha2_password的介绍,这次故障的原因可以猜测为:在从库连接主库的时候使用的是不被 caching_sha2_password认可的RSA公钥,所以主库MySQL拒绝了数据库连接的请求,从而,从库报错’caching_sha2_password’ reported error:Authentication require secure connection。

根据上一张密码传输方式的第3条,该插件发现连接未加密,因此需要使用RSA加密来传输密码。但是,服务器不会将公用密钥发送给客户端,并且客户端未提供公用密钥,因此它无法加密密码并且连接失败:ERROR 2061 (HY000): Authentication plugin ‘caching_sha2_password’

reported error: Authentication requires secure connection.

官网给出的解决方案如下:

要从服务器请求RSA公钥,需要指定选项 --get-server-public-key 。

7d00225124cac198c8e952545216e029.png

%E6%88%AA%E5%B1%8F2020-08-31%20%E4%B8%8B%E5%8D%885.43.59.png

从服务器请求基于RSA密钥对的密码交换所需的公共密钥。此选项适用于使用caching_sha2_password身份验证插件进行身份验证的客户端 。对于该插件,除非请求,否则服务器不会发送公钥。对于未使用该插件进行身份验证的帐户,将忽略此选项。如果未使用基于RSA的密码交换,也将被忽略,例如客户端使用安全连接连接到服务器时。

或者,如果客户端的文件包含服务器所需的RSA公钥的本地副本,则可以使用—server-public-key-path选项指定文件 。

8c5cd4130f1d04cb6c8846ed2419a060.png

%E6%88%AA%E5%B1%8F2020-08-31%20%E4%B8%8B%E5%8D%886.02.39.png

PEM格式的文 件的路径名,其中包含服务器用于基于RSA密钥对的密码交换所需的公用密钥的客户端副本。此选项适用于使用sha256_password或 caching_sha2_password身份验证插件进行身份验证的客户端 。

解决方案一:

使用复制用户请求服务器公钥:

mysql -u repl -p123 -h 118.31.127.96 -P3307 --get-server-public-key

在这种情况下,服务器将RSA公钥发送给客户端,后者使用它来加密密码并将结果返回给服务器。插件使用服务器端的RSA私钥解密密码,并根据密码是否正确来接受或拒绝连接。

重新在从库配置change masrer to并且start slave,复制可以正常启动:

#停止主从复制

#清空之前的主从复制配置信息

stop slave;

reset slave;

#从新配置主从复制

change master to master_user='repl',master_password='123',master_host='118.31.127.96',master_port=3307,master_auto_position=1;

start slave;

fefe30c834d3941d26ea8dddaa296f67.png

%E6%88%AA%E5%B1%8F2020-08-31%20%E4%B8%8B%E5%8D%885.45.24.png

解决方案二:

使用复制用户请求服务器公钥:

mysql -u repl -p123 -h 118.31.127.96 -P3307 --server-public-key-path=/mysqldata/my3308/data/public_key1.pem

重新在从库配置change masrer to并且start slave,复制可以正常启动:

#停止主从复制

#清空之前的主从复制配置信息

stop slave;

reset slave;

#从新配置主从复制

change master to master_user='repl',master_password='123',master_host='118.31.127.96',master_port=3307,master_auto_position=1;

start slave;

解决方案三:

根据社区提供的方案,修改复制账户,避免使用插件caching_sha2_password。

MySQL MySQL8.0主从同步报错2061问题解决_Cindy的博客-优快云博客

方法如下:

1.修改repl用户,使其使用别的秘密加密方式,不使用插件caching_sha2_password。

2.

CREATE USER 'repl'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'XXXX';

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

#检查复制账户

select user,host,plugin,authentication_string from user \G

*************************** 4. row ***************************

user: repl

host: %

plugin: mysql_native_password

authentication_string: *B2A7A5489FB0EE54E43E3ADCDDVDG5CCF255AF0

#重新配置主从配置

总结

出现ERROR 2061 (HY000): Authentication plugin ‘caching_sha2_password’

reported error: Authentication requires secure connection.是因为复制账户repl没有加密连接到主库,所以主库拒绝了在传输过程中,明文显示密码的连接。

解决方法有三种,如上。个人认为解决方法一和解决办法二 比 解决方法三 更有效,无需修改任何用户信息,仅需要通过 --get-server-public-key和–server-public-key-path请求公钥即可。

解决方法三完全避免了使用MySQL8.0的密码插件caching_sha2_password。

### 解决方案概述 在 macOS 上运行 MySQL 时,`caching_sha2_password` 认证插件可能需要安全连接才能正常工作。这是因为 `caching_sha2_password` 插件默认要求通过 SSL 或其他加密机制来保护传输中的数据[^2]。如果不满足这些条件,可能会遇到错误消息,例如 `(二) Last_IO_Error: Authentication plugin 'caching_sha2_password' reported error`[^3]。 以下是针对此问题的具体解决方案: --- ### 方法一:启用 SSL 连接 为了满足 `caching_sha2_password` 的需求,可以配置 MySQL 使用 SSL 加密通信。具体操作如下: #### 配置 SSL 参数 编辑 MySQL 配置文件(通常是 `/etc/my.cnf` 或 `/usr/local/mysql/etc/my.cnf`),添加以下内容: ```ini [mysqld] ssl-ca=/path/to/ca.pem ssl-cert=/path/to/server-cert.pem ssl-key=/path/to/server-key.pem ``` 确保路径指向有效的证书和私钥文件。完成后重启 mysqld 服务以应用更改。 #### 强制用户使用 SSL 可以通过创建或更新用户账户强制其使用 SSL: ```sql ALTER USER 'your_user'@'localhost' REQUIRE SSL; FLUSH PRIVILEGES; ``` 这样,当客户端尝试连接到数据库时,会自动协商并建立一个安全的 SSL 通道。 --- ### 方法二:切换回传统密码认证方式 如果不想启用 SSL,可以选择将用户的认证插件改为传统的 `mysql_native_password`。这一步骤适用于开发环境或其他不需要严格安全性的情况。 #### 修改全局默认认证插件 在 MySQL 配置文件中加入以下参数,并重启 mysqld: ```ini default_authentication_plugin=mysql_native_password ``` #### 更新现有用户账户 对于已经存在的用户,执行以下 SQL 命令将其认证插件更改为 `mysql_native_password`: ```sql ALTER USER 'your_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password'; FLUSH PRIVILEGES; ``` 注意替换 `'your_user'` 和 `'new_password'` 为实际使用的用户名和新密码。 --- ### 方法三:禁用安全连接的要求 另一种方法是让 `caching_sha2_password` 不再强制要求安全连接。虽然这种方法不推荐用于生产环境,但它可以帮助快速解决问题。 #### 设置允许明文传输 登录 MySQL 并运行以下命令: ```sql SET GLOBAL caching_sha2_password.allow_cleartext_without_ssl=ON; ``` 这一设置允许即使未使用 SSL 也能完成身份验证过程。然而,请谨慎使用此选项,因为它可能导致敏感信息暴露于网络监听之下。 --- ### 总结 上述三种方法分别对应不同的场景和技术偏好。如果注重安全性,则应优先考虑 **方法一**;若追求简单性和兼容性,可采用 **方法二** 或者临时调整行为至 **方法三**。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值