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

Bash脚本连接MySQL报ERROR 1043 (08S01) Bad handshake如何解决

报错核心原因

ERROR 1043 (08S01): Bad handshake 本质是MySQL客户端与服务端版本跨度过大导致连接握手协议不兼容:

  • 执行脚本的本地服务器使用的是MySQL 8.0.26版本客户端,默认采用caching_sha2_password认证插件、强制要求高版本TLS/SSL加密连接规则
  • 目标数据库是早期停止维护的MySQL 5.1.73版本,仅支持旧版mysql_native_password认证、默认不支持高版本SSL加密规则,无法识别8.0客户端发来的握手请求,直接抛错。
    另外原脚本存在一处参数笔误:--user=user1--password=testpw 两个参数之间缺少空格,会被客户端识别为用户名是user1--password=testpw,也会导致连接异常。
分步解决方法
  • 第一步:修正脚本参数笔误,同时补上local-infile启用参数(LOAD DATA LOCAL操作需要客户端、服务端同时开启该参数才可以执行),基础脚本修正为如下格式:
quary1="load data local infile '$file1' ignore INTO TABLE modifyvalues fields terminated by ',' LINES TERMINATED BY '\n' ignore 1 lines;"
mysql --host=10.32.90.33 --user=user1 --password=testpw --local-infile=1 --execute "$quary1"
  • 第二步:给连接命令追加兼容旧版本的参数,强制使用5.1版本支持的握手规则:
    • 加--skip-secure-auth参数:跳过8.0版本默认的高版本安全认证校验,兼容旧版密码认证逻辑
    • 加--ssl-mode=DISABLED参数:关闭SSL加密连接尝试,适配5.1版本默认无SSL的配置
      调整后完整可执行命令:
mysql --host=10.32.90.33 --user=user1 --password=testpw --skip-secure-auth --ssl-mode=DISABLED --local-infile=1 --execute "$quary1"
  • 第三步:如果加完上述参数仍报握手错误,直接在本地服务器安装MySQL 5.x系列的客户端程序,使用与服务端大版本匹配的客户端连接即可彻底规避版本兼容问题。安装完成后调用时写全旧版客户端的二进制路径即可,无需卸载自带的8.0版本客户端。
额外校验项
  • 脚本执行用户需要对$file1指向的CSV文件有可读权限,否则会触发文件读取报错
  • 目标MySQL 5.1服务端需要开启local_infile配置,可在连接成功后执行show variables like 'local_infile';确认参数值为ON,否则导入操作会被服务端拒绝。

内容的提问来源于stack exchange,提问作者Codec737

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:06:23