MySQLCC连接server221报ERROR 1043 Bad Handshake求助
解决 MySQL ERROR 1043 Bad Handshake 连接问题的调试指南
首先,ERROR 1043 Bad Handshake 这个错误大概率是客户端与服务器的MySQL协议版本不兼容,或者加密认证插件不匹配导致的。结合你提到旧PC用相同设置能正常连接server221的情况,咱们可以按以下步骤逐步排查:
一、先确认版本差异问题
这是最常见的诱因,尤其是新客户端连旧服务器的时候:
- 先搞清楚server221上的MySQL版本:在旧PC上连接后执行
SELECT VERSION();就能看到 - 再检查当前PC的MySQLCC版本,以及网页端使用的MySQL驱动版本(比如PHP的mysqli/pdo_mysql版本)
- 如果server221是MySQL 5.7及更早版本,而当前PC用了8.0+的客户端,新客户端默认用的
caching_sha2_password加密插件和旧服务器不兼容,直接就会触发握手失败
二、临时调整连接参数适配旧服务器
如果确实是版本不兼容,试试强制用旧认证协议连接:
- MySQLCC:在新建连接的「高级设置」里,找是否有“使用旧版认证协议”的选项,或者手动添加连接参数
--default-auth=mysql_native_password - 网页端:以PHP为例,在连接字符串里指定认证插件:
// PDO连接示例 $db = new PDO( 'mysql:host=192.168.0.221;dbname=你的数据库名', '用户名', '密码', [PDO::MYSQL_ATTR_DEFAULT_AUTH => 'mysql_native_password'] ); // MySQLi连接示例 $conn = mysqli_init(); mysqli_options($conn, MYSQLI_INIT_COMMAND, "SET default_auth=mysql_native_password"); mysqli_real_connect($conn, '192.168.0.221', '用户名', '密码', '你的数据库名');
三、检查server221的MySQL配置
如果能通过SSH登录server221,本地连接MySQL后检查这些配置:
- 查看你的用户用的是哪种认证插件:
要是显示的不是SELECT user, host, plugin FROM mysql.user WHERE user='你的用户名';mysql_native_password,就改成这个插件:ALTER USER '你的用户名'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码'; FLUSH PRIVILEGES; - 检查MySQL配置文件(my.cnf/my.ini)里的
default_authentication_plugin项,如果是新服务器但需要兼容旧客户端,要设置成mysql_native_password,改完重启MySQL服务 - 确认3306端口正常监听:Linux下执行
netstat -an | grep 3306,Windows下用netstat -ano | findstr 3306,确保端口是对外开放的
四、排查当前PC的本地环境
- 暂时关闭防火墙/安全软件:有时候本地防火墙会拦截MySQL的出站连接,关掉后测试能不能连上
- 重置MySQLCC的连接配置:删除旧的连接记录,重新创建一个新的,避免缓存的旧配置搞鬼
- 用原生命令行测试:在当前PC上打开终端,执行
mysql -h 192.168.0.221 -u 你的用户名 -p,看是否能成功,命令行的错误提示可能更详细
五、对比旧PC和当前PC的环境差异
既然旧PC能连,对比两者的这些点:
- MySQL客户端/驱动的版本号
- 操作系统版本(比如Win7和Win11的网络协议细节可能有差异)
- 防火墙、杀毒软件的设置
- 网络配置(是否在同一个子网、有没有用代理等)
按这个顺序排查,应该很快能找到问题根源。
内容的提问来源于stack exchange,提问作者Hanz Cheah
相关产品推荐
相关产品推荐

