13.4.1.1 PURGE BINARY LOGS 语句

PURGE { BINARY | MASTER } LOGS {
    TO 'log_name'
  | BEFORE datetime_expr
}

二进制日志是一组文件,其中包含有关 MySQL 服务器所做的数据修改的信息。日志由一组二进制日志文件和一个索引文件组成(请参阅 第 5.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当语句对实例有效时不应发出LOCK INSTANCE FOR BACKUP,因为它通过从服务器中删除文件违反了备份锁的规则。从 MySQL 8.0.28 开始,这是不允许的。

要安全地清除二进制日志文件,请遵循以下过程:

  1. 在每个副本上,用于 SHOW REPLICA STATUS检查它正在读取哪个日志文件。

  2. 使用 获取源上的二进制日志文件列表 SHOW BINARY LOGS

  3. 确定所有副本中最早的日志文件。这是目标文件。如果所有副本都是最新的,则这是列表中的最后一个日志文件。

  4. 备份您要删除的所有日志文件。(此步骤是可选的,但始终是可取的。)

  5. 清除所有日志文件,但不包括目标文件。

PURGE BINARY LOGS TO当文件中列出的二进制日志文件已通过其他方式(例如 在 Linux 上使用rm )从系统中删除时,PURGE BINARY LOGS BEFORE两者都会失败并显示错误。(错误 #18199,错误 #18453)要处理此类错误,请手动编辑文件(这是一个简单的文本文件)以确保它仅列出实际存在的二进制日志文件,然后再次运行 失败的语句。 .index.indexPURGE BINARY LOGS

二进制日志文件在服务器的二进制日志到期期限后自动删除。删除文件可以在启动时和刷新二进制日志时进行。默认的二进制日志有效期为 30 天。binlog_expire_logs_seconds 您可以使用系统变量指定替代有效期 。如果您正在使用复制,您应该指定一个不低于您的副本可能滞后于源的最长时间的到期期限。