13.4.1.1 PURGE BINARY LOGS 语句

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

二进制日志是一组文件,其中包含有关 MySQL 服务器进行的数据修改的信息。该日志由一组二进制日志文件和一个索引文件组成(请参阅第 5.4.4 节“二进制日志”)。

清除二进制日志语句删除指定的日志文件名或日期之前的日志索引文件中列出的所有二进制日志文件。 BINARYMASTER是同义词。删除的日志文件也将从记录在索引文件中的列 table 中删除,以便给定的日志文件成为列 table 中的第一个。

清除二进制日志需要BINLOG_ADMIN特权。如果未使用--log-bin选项启动服务器以启用二进制日志记录,则此语句无效。

Examples:

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'格式的值)。

复制副本时,可以安全地运行该语句。您无需停止它们。如果您有一个活动副本,当前正在读取您要删除的日志文件之一,则此语句不会删除正在使用的日志文件或晚于该日志文件的任何日志文件,但会删除任何较早的日志文件。在这种情况下会发出警告消息。但是,如果未连接副本,而您恰巧要清除尚未读取的日志文件之一,则副本在重新连接后将无法复制。

要安全清除二进制日志文件,请按照以下步骤操作:

  • 在每个副本上,使用显示从站状态检查它正在读取哪个日志文件。

  • 使用显示二进制日志获取复制源服务器上二进制日志文件的列 table。

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

  • 对要删除的所有日志文件进行备份。 (此步骤是可选的,但始终建议这样做.)

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

您还可以将expire_logs_days系统变量设置为在给定的天数后自动使二进制日志文件失效(请参阅第 5.1.7 节“服务器系统变量”)。如果使用复制,则应将变量设置为不小于副本可能滞后于源的最大天数。

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