MySQL 从服务器未删除旧的中继 binlog

MySQL 从服务器未删除旧的中继 binlog

我在另一台主机上有一个带从属复制的 MySQL 服务器。今天我偶然发现从属主机的磁盘使用率很高,并调查了是什么占用了所有空间。结果发现这个空间被从属中继日志占用了。

我尝试降低expire_logs_days变量并重新启动 MySQL 守护程序,但报告的磁盘空间保持不变。除了清除旧日志之外,我找不到任何其他方法FLUSH LOGS。我试过了,但没有结果。

有什么方法可以减少中继日志占用的磁盘空间?

答案1

expire_logs_days 设置控制二进制日志记录,而不是中继日志记录。

通常,当从服务器完成从中应用数据时,中继日志会被清除。这可以通过relay-log-purge更改,但默认值为1。

如果您的从属服务器只是落后,它将继续按照设计积累中继日志。您可能需要考虑设置中继日志空间限制,以防止出现磁盘空间不足的问题。此设置为 IO 线程用于存储中继日志的磁盘空间限制。

答案2

确保您没有relay_log_purge=0在配置中设置。我在排除复制问题时设置了此选项,但忘记将其删除。后来我们发现日志磁盘已满,因为中继日志在应用后未被清除。

您可以像这样动态检查和设置此变量的状态:

> SELECT @@global.relay_log_purge;
+--------------------------+
| @@global.relay_log_purge |
+--------------------------+
|                        0 |
+--------------------------+

> SET @@global.relay_log_purge = 1;
Query OK, 0 rows affected (0.04 sec)

> SELECT @@global.relay_log_purge;
+--------------------------+
| @@global.relay_log_purge |
+--------------------------+
|                        1 |
+--------------------------+

相关内容