PURGE { BINARY | MASTER } LOGS {
TO 'log_name'
| BEFORE datetime_expr
}
二进制日志是一组包含 MySQL 服务器数据修改信息的文件。日志由一组二进制日志文件和一个索引文件组成(见 第 7.4.4 节,“二进制日志”)。
PURGE BINARY LOGS
语句删除日志索引文件中指定的日志文件名前的所有二进制日志文件。BINARY
和 MASTER
是同义词。删除的日志文件也将从索引文件中的列表中删除,以便指定的日志文件成为列表中的第一个。
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
不能在实例锁定备份时发出,因为它违反了备份锁定的规则。
要安全地清除二进制日志文件,请按照以下步骤操作:
-
在每个副本上,使用
SHOW REPLICA STATUS
查看它正在读取的日志文件。 -
使用
SHOW BINARY LOGS
获取源上的二进制日志文件列表。 -
确定所有副本中最早的日志文件。这是目标文件。如果所有副本都是最新的,这将是列表中的最后一个日志文件。
-
备份您即将删除的所有日志文件。(这步骤是可选的,但总是建议的。)
-
清除目标文件之前的所有日志文件。
PURGE BINARY LOGS TO
和 PURGE BINARY LOGS BEFORE
都会在二进制日志文件列表中删除文件时出错(例如,使用 Linux 的 rm)。(Bug #18199,Bug #18453)要处理这些错误,请手动编辑 .index
文件(这是一个简单的文本文件),以确保它仅列出实际存在的二进制日志文件,然后重新运行失败的 PURGE BINARY LOGS
语句。
二进制日志文件将在服务器的二进制日志过期期限后自动删除。删除文件可能发生在启动时和二进制日志刷新时。默认的二进制日志过期期限为 30 天。您可以使用 binlog_expire_logs_seconds
系统变量指定备用过期期限。如果您使用复制,请指定一个不低于副本可能落后于源的最大时间的过期期限。