MySQL 8.x 连接 5.x 服务器认证问题解决方案

当使用 MySQL 8.x 客户端连接 MySQL 5.x 服务器时,可能会遇到认证协议不兼容的问题。这是因为 MySQL 8.x 默认使用了新的 caching_sha2_password 认证插件,而 MySQL 5.x 服务器不支持这种认证方式。

图片[1]_MySQL 8.x 连接 5.x 服务器认证问题解决方案_知途无界

问题表现

连接时可能出现以下错误:

ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory

ERROR 1045 (28000): Access denied for user 'username'@'host' (using password: YES)

解决方案

方法1:修改 MySQL 8.x 客户端连接方式(推荐)

在连接字符串中指定使用旧的 mysql_native_password 认证插件

对于命令行客户端 (mysql):

mysql -u username -p --default-auth=mysql_native_password -h hostname

对于编程连接(如 JDBC、Python 等):

在连接 URL 或配置中指定使用 mysql_native_password 插件。

JDBC 示例​:

jdbc:mysql://hostname:3306/database?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC&authenticationPlugins=com.mysql.cj.protocol.a.authentication.MySQLNativePasswordPlugin

Python (mysql-connector-python) 示例​:

import mysql.connector

config = {
  'user': 'username',
  'password': 'password',
  'host': 'hostname',
  'database': 'database',
  'auth_plugin': 'mysql_native_password'
}

cnx = mysql.connector.connect(**config)

方法2:在 MySQL 8.x 服务器上为特定用户配置旧认证方式(如果连接的是 MySQL 8.x 服务器)

虽然你连接的是 MySQL 5.x 服务器,但如果未来遇到类似问题(如 MySQL 8.x 服务器连接问题),可以:

  1. 登录 MySQL 8.x 服务器
  2. 执行以下命令为用户指定旧认证插件:
ALTER USER 'username'@'host' IDENTIFIED WITH mysql_native_password BY 'password';
FLUSH PRIVILEGES;

方法3:修改 MySQL 8.x 客户端默认配置(不推荐)

修改 my.cnf/my.ini 配置文件​(客户端配置):

[client]
default-auth=mysql_native_password

注意​:这种方法会影响所有使用该配置文件的连接,可能不适用于所有场景。

根本原因

  • MySQL 5.x​ 只支持 mysql_native_password 认证插件
  • MySQL 8.x​ 默认使用更安全的 caching_sha2_password 认证插件
  • 当 MySQL 8.x 客户端尝试连接 MySQL 5.x 服务器时,客户端可能默认尝试使用新插件,导致不兼容

最佳实践建议

  1. 对于连接 MySQL 5.x 服务器​:始终在连接时明确指定使用 mysql_native_password 认证插件
  2. 对于新项目​:如果可能,尽量统一 MySQL 服务器和客户端的版本
  3. 安全考虑​:mysql_native_password 虽然兼容性好,但安全性不如 caching_sha2_password,仅在必要时使用

其他注意事项

  • 如果使用 SSL 连接,可能需要额外配置 --ssl-mode=DISABLED 或正确配置 SSL 证书
  • 某些 MySQL 8.x 客户端工具(如 MySQL Workbench)也有界面选项可以指定认证插件
  • 对于 Docker 环境中的连接,确保容器内的 MySQL 客户端工具版本与连接需求匹配

通过以上方法,你应该能够成功解决 MySQL 8.x 客户端连接 MySQL 5.x 服务器时的认证问题。

© 版权声明
THE END
喜欢就点个赞,支持一下吧!
点赞58 分享
评论 抢沙发
头像
欢迎您留下评论!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容