You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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抓包,分析握手过程中密码是否正常发送:
    sudo tcpdump -i any host mysqlserver.hostname.com and port 3306 -w mysql-connect.pcap
    
    尝试连接后,用Wireshark打开生成的mysql-connect.pcap,查看MySQL协议的握手包,确认是否包含密码相关数据。
  • 查看客户端调试信息:启用客户端调试日志,查看认证过程细节:
    mysql -u bob -h mysqlserver.hostname.com --port 3306 -p --debug-info
    
    重点关注输出中“Authentication Plugin”相关内容,确认客户端是否使用了正确的mysql_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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 14:20:24