PURGE BINARY LOGS {
TO 'log_name'
| BEFORE datetime_expr
}
二进制日志是一组包含有关 MySQL 服务器所做的数据修改信息的文件。日志由一组二进制日志文件以及一个索引文件组成(参见 第 7.4.4 节,“二进制日志”)。
PURGE BINARY LOGS
语句会删除日志索引文件中列出的所有在指定日志文件名或日期之前的二进制日志文件。删除的日志文件也会从索引文件中记录的列表中移除,因此给定的日志文件将成为列表中的第一个文件。
PURGE BINARY LOGS
需要 BINLOG_ADMIN
权限。如果服务器不是使用 --log-bin
选项启动以启用二进制日志记录,则该语句无效。
示例
PURGE BINARY LOGS TO 'mysql-bin.010';
PURGE BINARY LOGS BEFORE '2019-04-02 22:46:26';
BEFORE
变体的 datetime_expr
参数应求值为 DATETIME
值(以 '
格式的值)。YYYY-MM-DD hh:mm:ss
'
PURGE BINARY LOGS
在副本进行复制时安全运行,无需停止副本。如果您有一个正在读取您要删除的日志文件的活动副本,该语句不会删除正在使用的日志文件或任何比该文件更新的日志文件,但会删除任何更早的日志文件。在这种情况下会发出警告消息。但是,如果副本未连接,而您恰好要清除它尚未读取的日志文件之一,则副本在重新连接后将无法复制。
PURGE BINARY LOGS
在实例上存在 LOCK INSTANCE FOR BACKUP
语句时无法发出,因为它违反了备份锁定的规则,因为它从服务器中删除了文件。
要安全地清除二进制日志文件,请按照以下步骤操作
在每个副本上,使用
SHOW REPLICA STATUS
检查它正在读取哪个日志文件。使用
SHOW BINARY LOGS
获取源上二进制日志文件的列表。确定所有副本中最早的日志文件。这是目标文件。如果所有副本都已更新,则这是列表中的最后一个日志文件。
备份您将要删除的所有日志文件。(此步骤是可选的,但始终建议这样做。)
清除直到但不包括目标文件的所有日志文件。
PURGE BINARY LOGS TO
和 PURGE BINARY LOGS BEFORE
在 .index
文件中列出的二进制日志文件已通过其他方式(例如,在 Linux 上使用 rm)从系统中删除时都会失败并显示错误。(错误 #18199,错误 #18453)要处理此类错误,请手动编辑 .index
文件(这是一个简单的文本文件),以确保它只列出实际存在的二进制日志文件,然后再次运行失败的 PURGE BINARY LOGS
语句。
在服务器的二进制日志过期时间后,二进制日志文件将自动删除。文件删除可以在启动时以及刷新二进制日志时进行。默认的二进制日志过期时间为 30 天。您可以使用 binlog_expire_logs_seconds
系统变量指定替代的过期时间。如果您使用的是复制,则应指定一个过期时间,该时间不低于您的副本可能落后于源的最大时间量。