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

如何在MySQL中启用复制启停操作的历史记录功能

MySQL从库复制启停操作记录方案

方案1:直接利用错误日志(最轻量,无额外开销)

MySQL默认会将复制线程的启停事件输出到错误日志中,仅需要调整错误日志输出等级即可覆盖需求,资源开销可忽略:

  • 执行如下配置(可写入my.cnf持久化生效):
-- 临时生效
SET GLOBAL log_error_verbosity = 2;
-- 永久生效写入my.cnf的[mysqld]段
-- log_error_verbosity = 2
  • 错误日志中会自动生成对应事件,可直接提取得到需要的记录:
    • 执行STOP SLAVE后,日志会先后打印Slave I/O thread stopped、Slave SQL thread stopped,取首次出现的时间即为STOP SLAVE的执行时间
    • 执行START SLAVE后,日志会先后打印Slave I/O thread starts、Slave SQL thread starts,取首次出现的时间即为START SLAVE的执行时间
  • 可通过简单的Shell脚本定期提取日志,输出你需要的格式:
Operation     |   <time>
STOP SLAVE    |   2024-05-20 14:32:11
START SLAVE   |   2024-05-20 14:35:09

方案2:使用审计插件实现精准语句记录

如果需要直接记录执行的语句本体而非线程状态,可使用审计插件配置过滤规则,仅记录复制相关操作,开销远低于通用查询日志:

  • MySQL官方企业版可开启自带审计插件,配置过滤规则仅匹配START SLAVE、STOP SLAVE、RESET SLAVE三类语句
  • 社区版MySQL或MariaDB可安装开源audit_log插件,同样配置语句过滤规则,仅记录你关注的复制启停操作,无需记录其他所有查询。

方案3:自定义状态监控表(适合需要结构化存储的场景)

你可以在从库创建一张自定义的复制状态记录表,再写一个轻量定时脚本(比如crontab每分钟执行一次,或后台进程每秒轮询一次),每次查询SHOW SLAVE STATUS的运行状态,和上一次存储的状态对比,如果发生变化就写入新的记录到表中,自动记录启停时间。

  • 建表参考语句:
CREATE TABLE replication_op_log (
    id INT AUTO_INCREMENT PRIMARY KEY,
    operation VARCHAR(20) NOT NULL,
    op_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:48:04