复制状态读什么
复制状态命令是复制链路的体检表,输出分成几大块:两个线程的运行状态、拉取与执行位点、事务集合、延迟指标、中继日志占用,以及最近的错误信息。排查复制问题的第一动作就是执行它,并且优先看两个错误字段,它们直接说明断在哪一环。8.0 还提供了结构化的复制监控表,接入监控比解析文本输出更稳定。
基本信息
| 用途 | 复制链路体检与故障定位 |
|---|---|
| 关键字段 | 线程状态、位点、中继日志占用、延迟、错误信息 |
| 优先查看 | 两个错误字段与中继日志占用 |
| 术语变化 | 8.0.22 起相关字段更名为 REPLICA 前缀 |
| 结构化替代 | 性能模式下的复制状态表 |
| 判读顺序 | 先线程状态,再错误,最后位点与延迟 |
典型使用场景
- 复制告警后的第一手定位:确认断在拉取还是重放环节
- 巡检输出延迟与中继日志占用趋势
- 主从切换前确认从库已经追平上游
- 位点方式配置复制时核对当前实际位点
- 排查数据不一致:比对已执行的事务集合与上游状态
- 监控改造:从解析文本输出迁移到结构化视图
一眼体检
一眼体检
SHOW REPLICA STATUS\G # 全量输出,重点看两个线程状态与错误字段
SELECT SERVICE_STATE FROM performance_schema.replication_connection_status; # 拉取线程状态
SELECT SERVICE_STATE FROM performance_schema.replication_applier_status; # 重放线程状态关键字段速查
关键字段速查
# Replica_IO_Running / Replica_SQL_Running 两个线程是否正常
# Read_Source_Log_Pos / Exec_Source_Log_Pos 已拉取位点 / 已执行位点
# Relay_Log_Space 中继日志占用,积压信号
# Seconds_Behind_Source 粗略延迟
# Last_IO_Error / Last_SQL_Error 最近错误,先看这两个
# Retrieved_Gtid_Set / Executed_Gtid_Set 已拉取 / 已执行的事务集合字段逐项读法
| 字段 | 含义 | 判读要点 |
|---|---|---|
| Replica_IO_Running | 从库拉取线程状态 | 为 No 说明拉取链路断了 |
| Replica_SQL_Running | 从库重放线程状态 | 为 No 多为数据冲突或约束报错 |
| Read_Source_Log_Pos | 已拉取日志位点 | 与执行位点差距大表示重放落后 |
| Exec_Source_Log_Pos | 已执行日志位点 | 与拉取位点的差值就是积压量 |
| Relay_Log_Space | 中继日志占用字节数 | 持续增长是重放跟不上的早期信号 |
| Seconds_Behind_Source | 粗略延迟秒数 | 长事务存在时会失真 |
| Last_IO_Error | 最近拉取错误 | 网络、认证与位点被清理都会反映在这 |
| Last_SQL_Error | 最近重放错误 | 通常给出冲突的主键或唯一键线索 |
| Retrieved_Gtid_Set | 已拉取的事务集合 | 与执行集合比较可定位缺口 |
| Executed_Gtid_Set | 已执行的事务集合 | 切换前确认已经追平 |
两个线程状态要分别判断:拉取线程断开通常是网络、账号口令或上游日志已被清理;重放线程断开基本是数据冲突、唯一键重复或对象不存在,处置方式完全不同。
延迟指标只作参考:上游有长事务或大表改表时它会失真,甚至短暂归零;判断复制是否真正追平要看位点差与已执行的事务集合。
复制报错后不要急着跳过错误:跳过一条冲突事务可能让主从数据永久不一致,应先把出错事务的内容与影响范围查清,再决定是跳过还是重建。
复制巡检清单
- 两个线程状态均为运行中
- 错误字段为空,没有未处理的存量错误
- 拉取位点与执行位点的差值在可接受范围
- 中继日志占用没有持续增长
- 延迟指标在阈值内,且不把它当作唯一判据
- 监控解析使用结构化视图而不是文本输出
复制状态要留历史曲线:单次快照只能说明当下正常,位点差与中继日志占用的增长趋势才能提前发现重放能力不足的问题。