MySQL 8.0 定期清理二进制日志
登录MySQL查看binlog先关的参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | mysql> show variables like 'log%bin%'; +----------------------------------+----------------------------+ | Variable_name | Value | +----------------------------------+----------------------------+ | log_bin | ON | | log_bin_basename | /data/mysql80/binlog | | log_bin_index | /data/mysql80/binlog.index | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | | log_statements_unsafe_for_binlog | ON | +----------------------------------+----------------------------+ 6 rows in set (0.00 sec) mysql> show variables like 'binlog_format'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | binlog_format | ROW | +---------------+-------+ 1 row in set (0.00 sec) mysql> show variables like '%expire%'; +--------------------------------+---------+ | Variable_name | Value | +--------------------------------+---------+ | binlog_expire_logs_seconds | 2592000 | | disconnect_on_expired_password | ON | | expire_logs_days | 0 | +--------------------------------+---------+ 3 rows in set (0.00 sec) mysql> select 2592000/60/60/24; +------------------+ | 2592000/60/60/24 | +------------------+ | 30.000000000000 | +------------------+ 1 row in set (0.00 sec) |
查询上述参数后发现在MySQL 8.0.12版本中默认开启binlog日志并设置为binlog_format=row,binlog失效日期参数为 binlog_expire_logs_seconds,默认30天过期。
注释:
在MySQL8.0 版本中新增参数binlog_expire_logs_seconds,可以精确到秒,而此前版本中expire_logs_days的单位为天,最小值为1,在MySQL8.0 GA中此参数标记为deprecated 。
在MySQL 8.0 GA版本默认使用binlog_expire_logs_seconds,时间为2592000秒,30天。
若在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的默认值不适用。
该参数支持动态修改,并且支持持久话到配置文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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) |
结论:
在MySQL8.0版本对于binlog需要自定义设置的比较好,可以指定binlog文件的存储路径和binlog文件的命名,设置binlog文件的保留的时间,需要注意防止默认设置产生较多的binlog文件占用磁盘空间。推荐使用参数binlog_expire_logs_seconds,设置为7天,即
binlog_expire_logs_seconds=604800