原因
主从中断导致relay log大量堆积,导致磁盘告警,参数relay_log_purge设置为on ,relay log 在应用完成后本该自动删除,但是由于主从中断,导致relay log大量堆积,从而磁盘告警。
需要手动清理relay log释放磁盘空间后进行主从恢复。
清理方法
reset slave;
中继日志知识
概念
中继日志 和 二进制日志一样 ,由一组编号文件 (包含描述数据库更改的事件)和一个索引文件(包含所有使用的中继日志文件的名称)组成 。
查看
中继日志文件与二进制日志文件具有相同的格式,可以使用mysqlbinlog读取。
命名
中继日志的命名规则: host_name
-relay-bin.nnnnnn
host_name:副本服务器的主机名
nnnnnn
:序列号,从000001
.开始
从实例 使用索引文件
跟踪当前正在使用的中继日志文件host_name
-relay-bin.index
注意点
如果从实例中继日志文件的命名规则是基于服务器的hostname,在建立主从关系后,如果改变从实例服务器的主机名则会出现如下错误 failed to open the relay log and Could not find target log during relay log initialization 从而导致复制失败。如果你确定以后副本服务器的主机名会发生变化,则你可以使用系统变量 relay_log and relay_log_index 来确定中继日志文件 和 索引文件的前缀。从而不依赖于服务器的主机名。
产生新日志的场景
- IO thread 启动时
- 日志刷新时 ,例如执行 flush logs mysqldamin flush-logs;
- 超过系统变量 max_relay_log_size 设置的中继日志的大小,如果 max_relay_log_size 设置的为0 ,则 max_binlog_size 参数决定中继日志的大小。
删除中继日志
复制 SQL thread 在执行完文件中的所有事件并且不再需要它后,会自动删除中继日志文件。没有明确的机制来删除中继日志,因为复制 SQL 线程负责执行此操作。但是,FLUSH LOGS会轮换中继日志,这会影响复制 SQL 线程删除它们的时间。
MySQL :: MySQL 5.7 Reference Manual :: 16.2.4.1 The Relay Log