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是同义词。删除的日志文件也从索引文件中记录的列表中删除,因此给定的日志文件成为列表中的第一个。

--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'

当副本正在复制时,此语句可以安全运行。你不需要阻止他们。如果您有一个当前正在读取您试图删除的日志文件之一的活动副本,则此语句不会删除正在使用的日志文件或任何晚于该文件的日志文件,但会删除任何较早的日志文件。在MySQL 5.6.12及之后的版本中,这种情况会发出警告信息。(缺陷号 13727933)但是,如果副本未连接并且您碰巧清除了它尚未读取的其中一个日志文件,则副本在重新连接后无法复制。

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

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

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

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

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

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

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

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