#### 13.4.1.1 清除二进制日志语句

[](<>)[](<>)

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

二进制日志是一组文件，其中包含有关 MySQL 服务器所做的数据修改的信息。日志由一组二进制日志文件和一个索引文件组成（参见[第 5.4.4 节，“二进制日志”](binary-log.html)）。

这[`清除二进制日志`](purge-binary-logs.html)语句删除指定日志文件名或日期之前的日志索引文件中列出的所有二进制日志文件。`二进制`和`掌握`是同义词。删除的日志文件也会从记录在索引文件中的列表中删除，因此给定的日志文件将成为列表中的第一个。

[`清除二进制日志`](purge-binary-logs.html)需要[`BINLOG_ADMIN`](privileges-provided.html#priv_binlog-admin)特权。如果服务器不是以[`--log-bin`](replication-options-binary-log.html#option_mysqld_log-bin)启用二进制日志记录的选项。

例子：

```
PURGE BINARY LOGS TO 'mysql-bin.010';
PURGE BINARY LOGS BEFORE '2019-04-02 22:46:26';
```

这`前`变体的*`日期时间表达式`*参数应该评估为[`约会时间`](datetime.html)值（在`'*`YYYY-MM-DD hh:mm:ss`*'`格式）。

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

[`清除二进制日志`](purge-binary-logs.html)不应该发出而[`为备份锁定实例`](lock-instance-for-backup.html)语句对实例有效，因为它通过从服务器中删除文件违反了备份锁的规则。从 MySQL 8.0.28 开始，这是不允许的。

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

1.  在每个副本上，使用[`显示副本状态`](show-replica-status.html)检查它正在读取哪个日志文件。

2.  获取源上二进制日志文件的列表[`显示二进制日志`](show-binary-logs.html).

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

4.  备份您将要删除的所有日志文件。（此步骤是可选的，但始终是可取的。）

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

`清除二进制日志到`和`清除二进制日志之前`当二进制日志文件列在`。指数`文件已通过其他方式从系统中删除（例如使用**R M**在 Linux 上）。（错误 #18199、错误 #18453）要处理此类错误，请编辑`。指数`文件（这是一个简单的文本文件），以确保它仅列出实际存在的二进制日志文件，然后再次运行[`清除二进制日志`](purge-binary-logs.html)失败的声明。

二进制日志文件在服务器的二进制日志过期后自动删除。可以在启动时和刷新二进制日志时删除文件。默认二进制日志有效期为 30 天。您可以使用[`binlog_expire_logs_seconds`](replication-options-binary-log.html#sysvar_binlog_expire_logs_seconds)系统变量。如果您使用复制，则应指定不低于副本可能滞后于源的最长时间的到期期限。
