Skip to content

MySQL 复制指标

复制指标的重要性

复制指标是监控 MySQL 复制健康状况的关键,它们可以帮助 DBA:

  • 实时了解复制状态
  • 及时发现复制问题
  • 监控复制性能
  • 优化复制配置
  • 预测复制故障

复制指标分类

1. 复制状态指标

这些指标反映了复制的运行状态,包括复制是否正常运行、是否存在错误等。

1.1 复制线程状态

  • Replica_IO_Running:从库 IO 线程是否运行
  • Replica_SQL_Running:从库 SQL 线程是否运行
  • Last_IO_Errno:最后一个 IO 错误编号
  • Last_IO_Error:最后一个 IO 错误信息
  • Last_SQL_Errno:最后一个 SQL 错误编号
  • Last_SQL_Error:最后一个 SQL 错误信息

查询命令

sql
SHOW REPLICA STATUS\G;

1.2 复制连接状态

  • Slave_IO_State:从库 IO 线程的当前状态
  • Connect_Retry:连接重试间隔
  • Master_Connect_Retry:主库连接重试间隔

查询命令

sql
SHOW REPLICA STATUS\G;

1.3 GTID 状态

  • Retrieved_Gtid_Set:已接收的 GTID 集
  • Executed_Gtid_Set:已执行的 GTID 集
  • Auto_Position:是否使用 GTID 自动定位

查询命令

sql
SHOW REPLICA STATUS\G;

2. 复制延迟指标

这些指标反映了从库与主库之间的延迟情况,是复制监控的核心指标之一。

2.1 Seconds_Behind_Source

  • 定义:从库落后主库的秒数
  • 获取方式:通过 SHOW REPLICA STATUS 命令
  • 理想值:0 秒
  • 阈值:根据业务需求设置,通常为 5-30 秒

查询命令

sql
SHOW REPLICA STATUS\G;

2.2 GTID 延迟

  • 定义:通过比较主库和从库的 GTID 集计算的延迟
  • 计算方式
    1. 在主库上获取已执行的 GTID 集
    2. 在从库上获取已执行的 GTID 集
    3. 计算两者的差异,估算延迟

查询命令

sql
-- 主库上执行
SELECT @@GLOBAL.gtid_executed;

-- 从库上执行
SELECT @@GLOBAL.gtid_executed;

2.3 日志位置延迟

  • 定义:通过比较主库和从库的二进制日志位置计算的延迟
  • 相关指标
    • Master_Log_File/Read_Master_Log_Pos:主库上当前读取的日志文件和位置
    • Relay_Master_Log_File/Exec_Master_Log_Pos:从库上当前执行的日志文件和位置

查询命令

sql
SHOW REPLICA STATUS\G;

3. 复制性能指标

这些指标反映了复制的性能表现,包括复制的吞吐量、延迟等。

3.1 二进制日志生成速率

  • 定义:主库每秒生成的二进制日志大小
  • 相关状态变量
    • Binlog_bytes_written:二进制日志写入的总字节数
    • Uptime:MySQL 运行时间

计算方式

sql
-- 计算二进制日志生成速率(字节/秒)
SELECT VARIABLE_VALUE / VARIABLE_VALUE FROM GLOBAL_STATUS WHERE VARIABLE_NAME IN ('Binlog_bytes_written', 'Uptime');

3.2 复制应用速率

  • 定义:从库每秒应用的二进制日志事件数
  • 相关状态变量
    • Slave_received_heartbeats:接收的心跳次数
    • Slave_last_heartbeat:最后一次心跳时间

查询命令

sql
SHOW GLOBAL STATUS LIKE 'Slave_%';

3.3 复制线程负载

  • 定义:复制线程的 CPU 和内存使用率
  • 监控方式
    • 使用 Performance Schema 监控复制线程
    • 使用操作系统工具监控 MySQL 进程

查询命令

sql
-- 使用 Performance Schema 监控复制线程
SELECT * FROM performance_schema.threads WHERE NAME LIKE '%slave%';

4. 复制队列指标

这些指标反映了复制队列的大小,包括主库上未发送的二进制日志和从库上未应用的中继日志。

4.1 中继日志队列大小

  • 定义:从库上未应用的中继日志大小
  • 相关指标
    • Relay_Log_Space:中继日志的总大小

查询命令

sql
SHOW REPLICA STATUS\G;

4.2 二进制日志队列大小

  • 定义:主库上未发送的二进制日志大小
  • 计算方式
    1. 在主库上获取当前二进制日志位置
    2. 在从库上获取已接收的二进制日志位置
    3. 计算两者的差异

查询命令

sql
-- 主库上执行
SHOW MASTER STATUS;

-- 从库上执行
SHOW REPLICA STATUS\G;

5. 复制配置指标

这些指标反映了复制的配置情况,包括复制模式、线程数等。

5.1 复制模式

  • Binlog_format:二进制日志格式(STATEMENT、ROW、MIXED)
  • Binlog_row_image:ROW 格式下记录的行数据内容(FULL、MINIMAL、NOBLOB)

查询命令

sql
SHOW GLOBAL VARIABLES LIKE 'binlog_format';
SHOW GLOBAL VARIABLES LIKE 'binlog_row_image';

5.2 并行复制配置

  • Replica_parallel_type:并行复制类型(DATABASE、LOGICAL_CLOCK)
  • Replica_parallel_workers:并行复制线程数

查询命令

sql
SHOW GLOBAL VARIABLES LIKE 'replica_parallel%';

5.3 复制过滤配置

  • Replicate_Do_DB:需要复制的数据库
  • Replicate_Ignore_DB:需要忽略的数据库
  • Replicate_Do_Table:需要复制的表
  • Replicate_Ignore_Table:需要忽略的表
  • Replicate_Wild_Do_Table:需要复制的通配符表
  • Replicate_Wild_Ignore_Table:需要忽略的通配符表

查询命令

sql
SHOW REPLICA STATUS\G;

使用 Performance Schema 监控复制指标

MySQL 5.6 引入的 Performance Schema 提供了丰富的复制监控指标,可以更细粒度地监控复制性能。

1. 复制连接状态表

sql
-- 查看复制连接状态
SELECT * FROM performance_schema.replication_connection_status;

2. 复制应用器状态表

sql
-- 查看复制应用器状态
SELECT * FROM performance_schema.replication_applier_status;

-- 查看按工作线程分组的复制应用器状态
SELECT * FROM performance_schema.replication_applier_status_by_worker;

-- 查看按协调器分组的复制应用器状态
SELECT * FROM performance_schema.replication_applier_status_by_coordinator;

3. 复制连接配置表

sql
-- 查看复制连接配置
SELECT * FROM performance_schema.replication_connection_configuration;

4. 复制应用器配置表

sql
-- 查看复制应用器配置
SELECT * FROM performance_schema.replication_applier_configuration;

使用 Sys Schema 监控复制指标

MySQL 5.7 引入的 Sys Schema 提供了更友好的复制监控视图,基于 Performance Schema。

1. 复制状态摘要

sql
-- 查看复制状态摘要
SELECT * FROM sys.replication_status;

2. 复制连接状态

sql
-- 查看复制连接状态
SELECT * FROM sys.replication_connection_status;

3. 复制应用器状态

sql
-- 查看复制应用器状态
SELECT * FROM sys.replication_applier_status_by_worker;

4. 复制延迟

sql
-- 查看复制延迟
SELECT * FROM sys.replication_delay;

复制指标的监控工具

1. MySQL Enterprise Monitor

  • 官方企业级监控工具
  • 提供全面的复制监控功能
  • 支持自动告警和故障检测

2. Prometheus + Grafana

  • 开源监控组合
  • 通过 MySQL Exporter 收集复制指标
  • 提供丰富的可视化仪表盘
  • 支持灵活的告警配置

3. Zabbix

  • 开源监控系统
  • 支持 MySQL 复制监控模板
  • 提供多种告警方式

4. Nagios

  • 开源监控系统
  • 通过插件支持 MySQL 复制监控
  • 提供灵活的告警配置

复制指标的阈值设置

1. 复制延迟阈值

  • 警告级:延迟超过 5 秒
  • 严重级:延迟超过 30 秒
  • 紧急级:延迟超过 5 分钟或复制中断

2. 复制线程状态阈值

  • 警告级:复制线程状态异常但未中断
  • 严重级:复制线程中断

3. 复制队列阈值

  • 警告级:中继日志队列大小超过 1GB
  • 严重级:中继日志队列大小超过 10GB

复制指标的优化

1. 优化复制延迟

  • 增加并行复制线程数
  • 优化主库性能,减少二进制日志生成延迟
  • 优化从库性能,提高二进制日志应用速度
  • 减少主库上的大事务
  • 优化网络连接,减少网络延迟

2. 优化复制性能

  • 选择合适的二进制日志格式
  • 优化并行复制配置
  • 调整复制缓冲区大小
  • 优化从库的存储引擎配置

3. 优化复制可靠性

  • 启用 GTID 复制
  • 启用半同步复制
  • 配置复制自动恢复
  • 定期进行复制健康检查

不同版本的复制指标差异

MySQL 5.6

  • 引入了 Performance Schema 中的复制监控
  • 支持基本的复制指标监控
  • 复制指标相对较少

MySQL 5.7

  • 增强了 Performance Schema 中的复制监控
  • 引入了 Sys Schema 中的复制监控视图
  • 增加了更多的复制指标

MySQL 8.0

  • 进一步增强了 Performance Schema 中的复制监控
  • 扩展了 Sys Schema 中的复制监控视图
  • 增加了更多的复制指标
  • 支持更细粒度的复制监控

常见问题(FAQ)

Q1: 如何理解 Seconds_Behind_Source 指标?

A1: Seconds_Behind_Source 是从库落后主库的秒数,它基于主库和从库的时间戳计算。对于逻辑复制,该指标可能不准确,因为它依赖于 SQL 语句的执行时间。对于精确的复制延迟监控,建议结合 GTID 集比较和心跳表等多种方法。

Q2: 如何监控多个从库的复制指标?

A2: 监控多个从库的复制指标的方法包括:

  1. 使用集中式监控工具(如 Prometheus + Grafana)
  2. 编写脚本定期检查所有从库的复制状态
  3. 使用 MySQL Enterprise Monitor 等商业监控工具
  4. 配置 Zabbix 或 Nagios 监控所有从库

Q3: 如何处理复制延迟过高的问题?

A3: 处理复制延迟过高的问题的方法包括:

  1. 增加并行复制线程数
  2. 优化主库性能,减少二进制日志生成延迟
  3. 优化从库性能,提高二进制日志应用速度
  4. 减少主库上的大事务
  5. 优化网络连接,减少网络延迟
  6. 考虑使用多源复制或级联复制

Q4: 如何使用 Performance Schema 监控复制性能?

A4: 使用 Performance Schema 监控复制性能的方法包括:

  1. 查询 replication_connection_status 表监控复制连接状态
  2. 查询 replication_applier_status_by_worker 表监控复制应用器状态
  3. 查询 replication_applier_status_by_coordinator 表监控复制协调器状态
  4. 结合 Performance Schema 的其他表监控复制线程的资源使用情况

Q5: 如何设置合理的复制指标告警阈值?

A5: 设置合理的复制指标告警阈值需要考虑:

  1. 业务对数据一致性的要求
  2. 系统的正常复制延迟范围
  3. 不同时间段的负载变化
  4. 历史复制延迟趋势
  5. 复制架构的复杂性

Q6: 如何监控 GTID 复制的指标?

A6: 监控 GTID 复制的指标的方法包括:

  1. 使用 SHOW REPLICA STATUS 命令查看 GTID 相关指标
  2. 比较主库和从库的 GTID 集
  3. 使用 Performance Schema 监控 GTID 复制
  4. 使用 Sys Schema 中的复制监控视图

Q7: 如何区分复制延迟是由主库还是从库引起的?

A7: 区分复制延迟原因的方法包括:

  1. 检查主库的负载情况,包括 CPU、内存、磁盘 I/O 等
  2. 检查主库的二进制日志生成速率
  3. 检查从库的负载情况
  4. 检查从库的复制应用速率
  5. 检查网络连接情况
  6. 分析主库和从库的错误日志