MySQL binlog日志清理方案
作者:mmseoamin日期:2023-12-14
# 登录mysql数据库
mysql -u root –p
# 查看binlog是否开启,log_bin的状态为ON,表明binlog日志开启
show variables like 'log_%';
# 查看binlog日志文件大小,单位bytes
show binary logs;
# 显示binlog的过期时间,mysql5版本参数为expire_logs_days(默认值为0,标识从不删除),mysql8版本参数为binlog_expire_logs_seconds(默认值为2592000(30天),单位秒)
show variables like '%expire%';

1 手工清除binlog

        删除binlog日志文件,切勿删除正在使用的binlog 所以删除旧的即可,不要全删。 不要轻易手动去删除binlog(指的是rm命令), 会导致binlog.index和真实存在的binlog不匹配,推荐使用purge命令予清除历史文件(purge命令目前来说不区分版本)。

# 将mysql-bin.009560之前的binlog清掉
purge binary logs to 'mysql-bin.009560';
# 指定时间之前的binlog清掉
purge binary logs before '2023-08-01 00:00:00';

2 MySQL5版本

2.1 临时生效,重启后失效

# 设置保留7天
set global expire_logs_days=7;
# 触发自动清理
flush logs;

2.2 永久有效,需要重启

修改配置文件my.cnf文件: vim /etc/my.cnf,在[mysqld]标签内增加如下内容

expire_logs_days=7
max_binlog_size=1024M

修改保存后,以下3种情况才生效:

  • MySQL启动时
  • 手动执行flush logs
  • 当binlog大小超过max_binlog_size
    # 执行命令是配置生效
    flush logs;

    3 MySQL8版本

    3.1 临时生效,重启后失效

    # 设置保留7天
    set global binlog_expire_logs_seconds=7*60*60*24;
    # 触发自动清理
    flush logs;

    3.2 永久有效,需要重启

    修改配置文件my.cnf文件: vim /etc/my.cnf,在[mysqld]标签内增加如下内容

    # 设置保留7天
    binlog_expire_logs_seconds=604800
    max_binlog_size=1024M

    生效条件见2.2模块