代码改变世界

MySQL8中binlog过期参数

2023-05-25 10:30  abce  阅读(1900)  评论(0编辑  收藏  举报

binlog_expire_logs_seconds

设置二进制日志过期时间(以秒为单位)。二进制日志文件过期后,可以被自动删除。可能的删除发生在启动时和刷新二进制日志(flush logs、或日志容量超过max_binlog_size的设置)时。

默认的二进制日志过期时间为2592000秒,即30天(30*24*60*60秒)。

如果binlog_expire_logs_seconds和已弃用的系统变量expire_logs_days都没有在启动时设置值,则应用默认值。

如果在启动时设置了binlog_expire_logs_seconds或expire_logs_days其中一个变量的非零值,则使用该值作为二进制日志的过期时间。

如果在启动时设置了这两个变量为非零值,则binlog_expire_logs_seconds的值将用作二进制日志的过期时间,而expire_logs_days的值将被忽略并发出警告消息。

在运行时,如果binlog_expire_logs_seconds或expire_logs_days当前被设置为非零值,则不能将另外一个设置为非零值。

由于binlog_expire_logs_seconds的默认值不为零,因此必须显式地将binlog_expire_logs_seconds设置为零,才能设置或更改expire_logs_days的值。

从MySQL 8.0.29开始,可以通过将binlog_expire_logs_auto_purge系统变量设置为OFF来禁用二进制日志的自动清除。这优先于binlog_expire_logs_seconds的任何设置。

在MySQL 8.0.28及更早的版本中,要禁用自动清除二进制日志,请显式地为binlog_expire_logs_seconds指定值0,并且不要为expire_logs_days指定值。

为了与早期版本兼容,如果显式地为expire_logs_days指定值为0,而不为binlog_expire_logs_seconds指定值,自动清除也将被禁用。在这种情况下,不应用binlog_expire_logs_seconds的默认值。

要手动删除二进制日志文件,请使用PURGE binary LOGS语句。

 

binlog_expire_logs_auto_purge

启用或禁用自动清除二进制日志文件。将此变量设置为ON(默认值)将启用自动清除;将其设置为OFF将禁用自动清除。清理前等待的时间间隔由binlog_expire_logs_seconds和expire_logs_days控制。

即使设置binlog_expire_logs_auto_purge为on,如果将binlog_expire_logs_seconds和expire_logs_days都设置为0,自动清理日志功能也不会生效。

 

expire_logs_days

在8中,已经过期。将来会被移除。