暂无图片
暂无图片
8
暂无图片
暂无图片
暂无图片

主从复制报错2061:Authentication plugin 'caching_sha2_password' reported error:Authentication require secure connection

原创 徐佩怡 2020-08-31
15584

主从复制报错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 。
截屏20200831 下午5.43.59.png
从服务器请求基于RSA密钥对的密码交换所需的公共密钥。此选项适用于使用caching_sha2_password身份验证插件进行身份验证的客户端 。对于该插件,除非请求,否则服务器不会发送公钥。对于未使用该插件进行身份验证的帐户,将忽略此选项。如果未使用基于RSA的密码交换,也将被忽略,例如客户端使用安全连接连接到服务器时。

或者,如果客户端的文件包含服务器所需的RSA公钥的本地副本,则可以使用—server-public-key-path选项指定文件 。
截屏20200831 下午6.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;

截屏20200831 下午5.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的博客-CSDN博客
方法如下:
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。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论