MySQL 8.0.35客户端连接5.1.58服务器报1045权限错误求助
解决MySQL 8.0.35客户端连接5.1.58服务器时“using password: NO”的权限错误
一、通过配置强制兼容旧认证协议
MySQL 8.0客户端默认优先使用caching_sha2_password认证插件,而5.1服务器仅支持mysql_native_password,这会导致密码传递逻辑异常,出现明明输入密码却被判定为未提供的情况。你可以通过以下两种方式修复:
方式1:修改~/.my.cnf配置文件
在用户目录下的.my.cnf中添加以下内容(文件不存在则新建):
[client] user = bob host = mysqlserver.hostname.com port = 3306 default-auth=mysql_native_password
之后直接执行mysql命令即可,若不想明文存储密码,可保留-p参数手动输入,配置中的default-auth会强制客户端使用旧认证协议。
方式2:命令行直接指定参数
每次连接时添加--default-auth=mysql_native_password参数:
mysql -u bob -h mysqlserver.hostname.com --port 3306 -p --default-auth=mysql_native_password
二、无需服务器重启的诊断方法
- 抓包验证密码传输:在客户端机器执行tcpdump抓包,分析握手过程中密码是否正常发送:
尝试连接后,用Wireshark打开生成的sudo tcpdump -i any host mysqlserver.hostname.com and port 3306 -w mysql-connect.pcapmysql-connect.pcap,查看MySQL协议的握手包,确认是否包含密码相关数据。 - 查看客户端调试信息:启用客户端调试日志,查看认证过程细节:
重点关注输出中“Authentication Plugin”相关内容,确认客户端是否使用了正确的mysql -u bob -h mysqlserver.hostname.com --port 3306 -p --debug-infomysql_native_password插件。 - 环境变量传递密码测试:绕过客户端的密码输入交互逻辑,直接用环境变量传递密码:
如果能成功连接,说明客户端的密码输入交互模块对旧服务器存在兼容性问题。MYSQL_PWD=你的密码 mysql -u bob -h mysqlserver.hostname.com --port 3306
三、问题背景说明
这是MySQL 8.0客户端与超旧版本(5.1已停止官方支持多年)服务器的兼容性边缘问题。虽然官方修复了“bad handshake”的bug,但新版本客户端的密码处理逻辑已重构,与5.1服务器的协议协商过程中存在异常,导致输入的密码未被正确识别,从而出现“using password: NO”的错误提示。由于5.1已过生命周期,官方不会针对这类场景做专门适配,只能通过强制兼容旧认证协议的方式临时解决。
内容的提问来源于stack exchange,提问作者B Huber
相关产品推荐
相关产品推荐

