一.查看binlong参数
mysql> show variables like ‘%expire%’;
±-------------------------------±------+
| Variable_name | Value |
±-------------------------------±------+
| binlog_expire_logs_seconds | 86400 |
| disconnect_on_expired_password | ON |
| expire_logs_days | 0 |
±-------------------------------±------+
MySQL5.7 时变量名为expire_logs_days,精确度为天;
MySQL8.0 使用binlog_expire_logs_seconds来控制,其效果和名字的变化一样,精确度由天变成了秒。超过这个时间的 binlog 会被自动清理,自动清理的触发时机为(注意:并不是以每秒这样的固定频率检查是否有过期日志):
若在MySQL启动时inlog_expire_logs_seconds和expire_logs_days 都没设置值,则使用默认值的 binlog_expire_logs_seconds值,即30天;
若在MySQL启动时binlog_expire_logs_seconds或者expire_logs_days其中一个设置为非0值则非0值的
参数作为binlog日志失效期;
若在启动时binlog_expire_logs_seconds和expire_logs_days参数都设置为非0值则使用binlog_expire_logs_seconds值,expire_logs_days值则失效并对其发出告警信息。
若要关闭自动清除binlog文件的功能则需要显示指定binlog_expire_logs_seconds=0 并且不设置expire_logs_days的值。
为了兼容早期版本若显示指定了expire_logs_days =0而没有指定binlog_expire_logs_seconds的值
此时自动清理binlog日志则是 禁用 的,并且此时binlog_expire_logs_seconds的默认值不适用。
动态修改:
mysql> set global binlog_expire_logs_seconds=606024;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like ‘%expire%’;
±-------------------------------±------+
| Variable_name | Value |
±-------------------------------±------+
| binlog_expire_logs_seconds | 86400 |
| disconnect_on_expired_password | ON |
| expire_logs_days | 0 |
±-------------------------------±------+
3 rows in set (0.00 sec)
持久化:
mysql> set persist binlog_expire_logs_seconds=606024;
Query OK, 0 rows affected (0.00 sec)
手动删除binlog日志
(1)直接删除(不推荐,不太安全)
找到binlog所在目录,用rm binglog名 直接删除
例:rm mysql-bin.010
(2)通过mysql提供的工具来删除
删除之前可以先看一下purge的用法:help purge;
删除举例:
reset master//删除所有binlog日志,新日志编号从头开始
purge master logs to ‘mysql-bin.010’;//删除mysql-bin.010之前所有日志
purge master logs before ‘2003-04-02 22:46:26’;// 删除2003-04-02 22:46:26之前产生的所有日志