MySQL 定时清理Binlog日志并自动清理

MySQL的二进制日志(Binlog)对于数据库的恢复和复制是至关重要的。然而,随着时间的推移,这些日志文件可能会占据大量存储空间。因此,及时而安全地删除这些日志文件变得非常重要。

1. 手动删除Binlog日志

1.1 查看当前的Binlog文件
-- 查看当前的Binlog文件
SHOW BINARY LOGS;

MySQL 定时清理Binlog日志并自动清理_MySQL

1.2 删除特定文件的Binlog日志

首先,我们可以手动删除特定文件的Binlog日志。、

-- 删除特定文件,替换'filename'为实际文件名
PURGE BINARY LOGS TO 'filename';
1.3 删除早于特定时间点的Binlog日志

如果你想删除早于特定时间点的Binlog日志,可以使用以下命令:

-- 删除早于'YYYY-MM-DD HH:MM:SS'时间点的Binlog日志
PURGE BINARY LOGS BEFORE 'YYYY-MM-DD HH:MM:SS';
-- 删除7天之前的Binlog日志
PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);

2. 配置自动删除Binlog日志

my.cnf(或my.ini)文件中添加以下配置,以在达到指定大小时自动删除Binlog日志:
MySQL5.7:

[mysqld]
expire_logs_days = 7   			# 设置Binlog日志过期时间,单位为天
max_binlog_size = 1024M 		# 设置单个Binlog文件的最大大小

MySQL8以上:

[mysqld]
expire_logs_seconds = 604800  	# 设置Binlog日志过期时间,单位为秒(一周为604800秒)
max_binlog_size=1024M			# 设置单个Binlog文件的最大大小

3. 重启MySQL服务器

无论是手动删除还是配置自动删除,都需要重启MySQL服务器以应用更改。

sudo systemctl restart mysql

通过查询特定的系统变量来检查是否开启了自动清理Binlog日志。具体而言,你可以检查expire_logs_days 和 max_binlog_size 这两个变量的值。

使用以下SQL语句检查自动清理相关的系统变量:

SHOW VARIABLES LIKE 'expire_logs_days';
SHOW VARIABLES LIKE 'max_binlog_size';

这将返回当前的 expire_logs_daysmax_binlog_size 的值。如果这两个值都设置为非零且合理的数值,那么自动清理功能应该是开启的。

如果 expire_logs_days 的值为0,表示没有设置Binlog日志自动清理的过期时间,而如果 max_binlog_size 的值为0,表示没有设置单个Binlog文件的最大大小,这可能导致不会自动清理Binlog日志。