我在另一台主机上有一个带从属复制的 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 |
+--------------------------+