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
系统变量指定其他过期时间。如果您使用的是复制,则应指定一个过期时间,该时间不低于副本可能落后于源服务器的最长时间。