Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


15.4.1.1 清除二进制日志语句

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 语句在实例上生效,因为它违反了备份锁的规则,删除了服务器上的文件。

为了安全地清除二进制日志文件,请按照以下步骤进行:

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

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

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

  4. 备份要删除的所有日志文件的副本(这步骤是可选的,但总是建议的)。

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

PURGE BINARY LOGS TOPURGE BINARY LOGS BEFORE 都会在错误情况下失败,因为某些其他方式(例如在 Linux 上使用 rm)已经将在 .index 文件中列出的二进制日志文件从系统中删除。 (Bug #18199, Bug #18453) 为了解决这种错误,手动编辑 .index 文件(这是一个简单的文本文件),确保它只列出实际存在的二进制日志文件,然后重新运行失败的 PURGE BINARY LOGS 语句。

二进制日志文件将在服务器的二进制日志过期期限后自动删除。删除操作可以在启动和二进制日志刷新时进行。默认的二进制日志过期期限为 30 天。您可以使用 binlog_expire_logs_seconds 系统变量指定备用过期期限。如果您使用复制,应该指定一个过期期限,至少与最大延迟时间相匹配。