当使用 MySQL 8.x 客户端连接 MySQL 5.x 服务器时,可能会遇到认证协议不兼容的问题。这是因为 MySQL 8.x 默认使用了新的 caching_sha2_password 认证插件,而 MySQL 5.x 服务器不支持这种认证方式。
![图片[1]_MySQL 8.x 连接 5.x 服务器认证问题解决方案_知途无界](https://zhituwujie.com/wp-content/uploads/2025/09/d2b5ca33bd20250920095655.png)
问题表现
连接时可能出现以下错误:
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 服务器连接问题),可以:
- 登录 MySQL 8.x 服务器
- 执行以下命令为用户指定旧认证插件:
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 服务器时,客户端可能默认尝试使用新插件,导致不兼容
最佳实践建议
- 对于连接 MySQL 5.x 服务器:始终在连接时明确指定使用
mysql_native_password认证插件 - 对于新项目:如果可能,尽量统一 MySQL 服务器和客户端的版本
- 安全考虑:
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

























暂无评论内容