
中继日志是 MySQL 主从复制架构中,从库(Slave)的核心组件,用于暂存从主库(Master)接收到的二进制日志事件(binlog events),然后在本地执行的中间存储。它在主从复制中扮演了关键角色,确保数据同步的可靠性和持久性。
[mysqld]
relay_log = /var/lib/mysql/relay-bin
relay_log_index = /var/lib/mysql/relay-bin.index
relay_log_info_file = relay-log.info
relay_log_purge = ON
max_relay_log_size = 1G
sync_relay_log = 1
relay_log_recovery = ON-- 临时禁用自动清理
SET GLOBAL relay_log_purge = 0;
-- 查看当前中继日志状态
SHOW SLAVE STATUS\G
-- 清理指定日志
PURGE RELAY LOGS BEFORE '2023-08-20 00:00:00';参数 | 默认值 | 说明 |
|---|---|---|
relay_log | relay-bin | 中继日志文件名前缀 |
relay_log_index | relay-bin.index | 中继日志索引文件 |
relay_log_info_file | relay-log.info | 存储复制位置信息的文件(记录从库读取主库二进制日志的位置) |
relay_log_purge | ON | 是否自动清理已应用的中继日志(建议保持开启以节省空间) |
max_relay_log_size | 1G | 单个中继日志文件最大大小(超过此值会滚动生成新文件) |
sync_relay_log | 10000 | 同步写入磁盘的频率(0=每次提交都同步,N=每N次事务同步一次) |
relay_log_recovery | OFF | 崩溃后自动恢复中继日志(建议在主从复制场景开启以增强数据一致性) |
relay_log_purge
ON:自动删除已应用且不再需要的中继日志(默认推荐)OFF:需手动清理,适用于需要保留中继日志的场景(如审计)relay_log_recovery
ON),从库重启时会自动删除未完成的中继日志并重新拉取主库日志,确保数据一致性sync_relay_log
1 可提高数据安全性(每次事务提交都同步到磁盘),但会影响性能-- 设置中继日志文件最大为2GB
SET GLOBAL max_relay_log_size = 2G;
-- 开启中继日志崩溃恢复
SET GLOBAL relay_log_recovery = ON;
-- 查看当前配置
SHOW VARIABLES LIKE '%relay_log%';优点:
缺点:
内置工具mysqlbinlog:
# 查看日志内容
mysqlbinlog /var/lib/mysql/relay-bin.000001
# 实时监控日志事件
SHOW RELAYLOG EVENTS IN 'relay-bin.000001' FROM 123 LIMIT 10;第三方工具:
状态监控:
-- 查看复制状态
SHOW SLAVE STATUS\G
-- 查看当前中继日志
SHOW RELAYLOG EVENTS;
-- 监控延迟
SELECT
UNIX_TIMESTAMP() - UNIX_TIMESTAMP(Last_SQL_Exec_Time) AS delay_seconds
FROM performance_schema.replication_applier_status_by_worker;-- 手动清理所有已应用日志
PURGE RELAY LOGS TO 'relay-bin.000015';
-- 设置自动保留策略
SET GLOBAL relay_log_purge = 1;
SET GLOBAL expire_logs_days = 7;# 调整IO参数(适合SSD)
sync_relay_log = 1000
relay_log_space_limit = 10G
# 提升并行复制
slave_parallel_workers = 8
slave_parallel_type = LOGICAL_CLOCK场景1:中继日志损坏:
STOP SLAVE;
CHANGE MASTER TO RELAY_LOG_FILE='relay-bin.000001', RELAY_LOG_POS=123;
START SLAVE;场景2:磁盘空间不足:
# 临时切换日志路径
SET GLOBAL relay_log = '/new_path/relay-bin';-- 为每个通道维护独立的中继日志
CHANGE MASTER TO MASTER_HOST='master2' FOR CHANNEL 'channel2';特性 | Relay Log | Binlog |
|---|---|---|
生成位置 | 从库 | 主库/从库(主库生成为主) |
内容来源 | 主库的 binlog 内容 | 本地执行的 SQL 语句 |
用途 | 数据复制的中转存储 | 记录所有数据变更事件 |
生成位置
log_slave_updates=ON)内容来源
用途
mysqlbinlog 工具)配置示例:
-- 查看 relay log 配置
SHOW VARIABLES LIKE '%relay_log%';
-- 查看 binlog 配置
SHOW VARIABLES LIKE '%log_bin%';-- 关键监控项
SELECT
Relay_Log_Space AS log_space,
Slave_SQL_Running_State AS sql_state,
Seconds_Behind_Master AS replication_delay
FROM performance_schema.replication_connection_status;
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。