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'

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

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

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

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

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

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

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

You can also set the expire_logs_days system variable to expire binary log files automatically after a given number of days (see Section 5.1.7, “Server System Variables”). If you are using replication, you should set the variable no lower than the maximum number of days your replicas might lag behind the source.

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