MySQL查看主从复制状态的方法与排错指南
一、最核心命令(在从库执行,Windows Navicat / CMD都能用)
登录从库MySQL,执行这条命令:
SHOW SLAVE STATUS\G
注意:结尾是反斜杠+G,不要用分号。
重点看这两行,决定同步是否正常:
Slave_IO_Running
- Yes:从库成功连上主库,正在拉取二进制日志
- Connecting:连不上主库(IP、端口、防火墙、账号密码问题)
- No:连接失败
Slave_SQL_Running
- Yes:日志正常执行,数据同步正常
- No:数据冲突、主键重复、数据不一致,同步中断
二、几个关键状态字段解释
Last_IO_Error:IO线程报错信息,连不上主库时看这里。
Last_SQL_Error:SQL线程报错信息,同步中断、主键冲突都会写在这里。
Seconds_Behind_Master:主从延迟时间(单位秒)
- 0:无延迟,实时同步
- 数字越来越大:同步跟不上主库写入速度
Replicate_Wild_In_Table_List:可以查看你设置的【只同步部分表】的过滤规则是否生效。
三、主库上查看状态(主库执行)
查看主库二进制日志位置:
SHOW MASTER STATUS;
会显示当前binlog文件名和位置。
查看主库复制账号是否存在:
SELECT user,host FROM mysql.user WHERE user='repl';
四、Windows CMD 下查看完整日志(排查错误必备)
打开MySQL命令行
mysql -uroot -p
输入密码后执行:
SHOW SLAVE STATUS\G
五、常用启停命令
停止同步:
STOP SLAVE;
启动同步:
START SLAVE;
重置主从(重新搭建主从时使用):
RESET SLAVE ALL;
六、最简单的判断口诀
- IO=Connecting:网络/账号/防火墙不通
- IO=Yes,SQL=No:两张表数据不一致,主键冲突
- 两项都是Yes:主从同步正常,指定数据表会自动备份
你把执行 SHOW SLAVE STATUS\G 的结果发给我,我可以直接帮你定位问题。
七、知识扩展
在 MySQL 中,查看主从同步状态最核心的命令是 SHOW REPLICA STATUS(MySQL 8.0.22 及之后版本,旧版使用 SHOW SLAVE STATUS)。这条命令会返回一条包含大量字段的记录,通过解读这些字段,可以全面判断复制的健康状况。
建议在从库(Slave/Replica)上执行,并使用 \G 以垂直格式输出,方便阅读长字段。
SHOW REPLICA STATUS\G
注意:如果你使用的 MySQL 版本低于 8.0.22,请将命令中的 REPLICA 替换为 SLAVE。
需要重点关注的 6 个核心指标
在输出的大量字段中,以下几个字段是判断同步状态是否正常的核心:
Slave_IO_Running(IO 线程)
- 负责从主库拉取二进制日志(binlog)。
- 正常值:
Yes。 - 异常值:
No或Connecting。若为Connecting,通常表示网络不通、主库不可达或复制用户密码错误;若为No,则可能 IO 线程被停止或遇到致命错误。
Slave_SQL_Running(SQL 线程)
- 负责将中继日志(relay log)中的事件在从库上重放执行。
- 正常值:
Yes。 - 异常值:
No。通常表示 SQL 语句执行失败,例如主从库表结构不一致、数据冲突或主键重复。
Seconds_Behind_Master(同步延迟秒数)
- 表示从库落后主库的时间(以秒为单位)。
- 理想值:
0。 - 注意:如果该值持续增长或数值很大,说明从库处理速度跟不上主库写入速度。若该值为
NULL,则说明复制线程未运行或 IO 线程未连接。
Last_IO_Error / Last_SQL_Error(最近的错误信息)
当上述两个线程状态不是 Yes 时,这两个字段会显示具体的报错原因,是排查问题的第一手资料。
Master_Log_File 与 Read_Master_Log_Pos
表示 IO 线程已读取到的主库 binlog 文件名和位置。
Relay_Master_Log_File 与 Exec_Master_Log_Pos
- 表示 SQL 线程已执行到的主库 binlog 文件名和位置。
- 检查方法:对比这两组值,如果第一组(已读取)始终大于第二组(已执行),说明存在延迟。延迟越大,
Seconds_Behind_Master数值也会越大。
判断同步是否正常的流程
- 登录从库,执行
SHOW REPLICA STATUS\G。 - 检查
Slave_IO_Running和Slave_SQL_Running是否均为Yes。 - 检查
Last_IO_Error和Last_SQL_Error是否为空。 - 检查
Seconds_Behind_Master是否为0(或在可接受的延迟范围内,比如小于 10 秒)。
排查复制故障的常用命令
查看具体错误日志:
SHOW REPLICA STATUS\G
重点关注 Last_IO_Error 和 Last_SQL_Error 字段。
查看主库的同步状态(判断主库写入压力):
SHOW MASTER STATUS;
用于确认当前的 binlog 文件名和位置,方便从库管理员与 Master_Log_File 对比。
查看复制线程信息:
SHOW PROCESSLIST;
在输出中查找 system user 相关的复制线程,可查看其当前工作状态。
其他常用的监控方式
使用 performance_schema:
SELECT * FROM performance_schema.replication_connection_status\G SELECT * FROM performance_schema.replication_applier_status\G
这些表提供了比 SHOW REPLICA STATUS 更结构化的数据,适合用于监控脚本。
使用第三方工具:如 pt-heartbeat(Percona Toolkit),这是一种更精确的延迟监控方法,适合对延迟要求较高的生产环境。
到此这篇关于MySQL查看主从复制状态的方法与排错指南的文章就介绍到这了,更多相关MySQL查看主从复制状态内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
阿里云Linux CentOS 7.2下自建MySQL的root密码忘记的解决方法
这篇文章主要介绍了阿里云Linux CentOS 7.2下自建MySQL的root密码忘记的解决方法,需要的朋友可以参考下2017-07-07
mysql服务设置远程连接如何解决1251 client does not su
文章介绍了如何在远程主机上配置MySQL环境,并使用Navicat连接远程MySQL数据库的步骤,包括前期准备、mysql配置以及使用Navicat连接的过程2024-12-12
MySQL为JSON字段创建索引方式(Multi-Valued Indexes 多值索引)
这篇文章主要介绍了MySQL为JSON字段创建索引方式(Multi-Valued Indexes 多值索引),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-08-08
在linux服务器上配置mysql并开放3306端口的操作步骤
这篇文章主要介绍了在linux服务器上配置mysql并开放3306端口,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-09-09


最新评论