Last_IO_Error 是排查 MySQL 主从同步故障的唯一可信线索,必须优先检查;常见原因包括 server-uuid 冲突、TCP 连通性问题、权限错误、server-id 重复、skip-slave-start 启用及 slave_net_timeout 过小等。

Last_IO_Error 是唯一可信线索,别跳过它直接 START SLAVE
Slave_IO_Running: No 不是“线程丢了”,而是 MySQL 主动中止了 I/O 线程,所有原因都压缩在 Last_IO_Error 字段里。执行 SHOW SLAVE STATUS\G 后,眼睛只盯这一行——用 \G(不是分号),否则内容可能被截断。
常见现象与对应动作:
-
Last_IO_Error为空或仅含Connection lost→ 极大概率是/var/lib/mysql/auto.cnf中server-uuid重复(VM 克隆、Docker 镜像复用、断电后直接恢复数据目录都会导致) -
Last_IO_Error含error connecting to master→ 不是配置写错了,是 TCP 层连不通:检查nc -zv 主库IP 3306、主库ss -tlnp | grep :3306监听地址(别是127.0.0.1)、防火墙和云安全组 -
Last_IO_Error含Access denied for user→ 主库上查SELECT user, host, plugin FROM mysql.user WHERE user = 'repl_user';,确认host能匹配从库真实出口 IP,且plugin与从库版本兼容(MySQL 5.7 客户端不支持caching_sha2_password) -
Last_IO_Error含equal MySQL server ids→ 立刻检查主从双方my.cnf的[mysqld]段,server-id必须唯一且非 0
网络连通性必须测端口,不能只 ping
复制走的是 TCP 3306(或自定义端口),不是 ICMP。在从库执行:
-
nc -zv 主库IP 3306或telnet 主库IP 3306—— 超时或Connection refused就卡在这步 - 登录主库运行
ss -tlnp | grep :3306,确认监听的是0.0.0.0:3306或具体内网 IP,不是127.0.0.1:3306 - 检查主库防火墙:
ufw status(Ubuntu)或firewall-cmd --list-ports(CentOS),确保3306/tcp已放行 - 云服务器务必检查安全组(如阿里云/腾讯云),默认常只允许内网或特定 IP 段
server-uuid 冲突是最隐蔽的坑
克隆、快照、拷贝数据目录后,/var/lib/mysql/auto.cnf 很可能和主库一模一样。MySQL 启动时读取该文件生成实例唯一标识,重复则主库静默拒绝连接,I/O 线程卡在 Connecting 或直接变 No,Last_IO_Error 却可能为空。
- 定位文件:
find / -iname "auto.cnf" 2>/dev/null(通常为/var/lib/mysql/auto.cnf) - 备份原文件:
cp /var/lib/mysql/auto.cnf /tmp/auto.cnf.bak - 编辑文件,把
server-uuid改成合法 UUID(如a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8),确保与主库及其他从库不重复 - 必须重启 MySQL:
systemctl restart mysqld(仅STOP SLAVE; START SLAVE;不生效)
别忽略 skip-slave-start 和 slave_net_timeout
断电重启后若 Slave_IO_Running 一直是 No,还要查两个容易被漏掉的配置:
-
skip-slave-start = ON在my.cnf中被误加:执行SELECT @@skip_slave_start;,返回ON就得改配置,显式写skip-slave-start = OFF并重启 mysqld(SET GLOBAL不持久) -
slave_net_timeout设得太小(如默认 60 秒):主库空闲期稍长,I/O 线程就超时断开,反复显示Connecting。可临时调大:SET GLOBAL slave_net_timeout = 7200;,但永久生效需写入my.cnf并执行STOP SLAVE; START SLAVE; - GTID 模式下,
AUTO_POSITION = 1必须显式写在CHANGE MASTER TO里,否则重连机制压根不触发
真正难的不是查哪一行报错,而是当 Last_IO_Error 空着、nc 通着、server-id 对着、账号也看着没问题时,你还得想到去翻 auto.cnf——那个藏在数据目录深处、没人记得它存在的小文件。


















