#### 13.4.1.1 PURGE BINARY LOGS Statement

[]()[]()

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

 The binary log is a set of files that contain information about data modifications made by the MySQL server. The log consists of a set of binary log files, plus an index file (see [Section 5.4.4, “The Binary Log”](binary-log.html)).

 The [`PURGE BINARY LOGS`](purge-binary-logs.html) statement deletes all the binary log files listed in the log index file prior to the specified log file name or date. `BINARY` and `MASTER` are synonyms. Deleted log files also are removed from the list recorded in the index file, so that the given log file becomes the first in the list.

[`PURGE BINARY LOGS`](purge-binary-logs.html) requires the [`BINLOG_ADMIN`](privileges-provided.html#priv_binlog-admin) privilege. This statement has no effect if the server was not started with the [`--log-bin`](replication-options-binary-log.html#option_mysqld_log-bin) option to enable binary logging.

 Examples:

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

 The `BEFORE` variant's *`datetime_expr`* argument should evaluate to a [`DATETIME`](datetime.html) value (a value in `'*`YYYY-MM-DD hh:mm:ss`*'` format).

[`PURGE BINARY LOGS`](purge-binary-logs.html) is safe to run while replicas are replicating. You need not stop them. If you have an active replica that currently is reading one of the log files you are trying to delete, this statement does not delete the log file that is in use or any log files later than that one, but it deletes any earlier log files. A warning message is issued in this situation. However, if a replica is not connected and you happen to purge one of the log files it has yet to read, the replica cannot replicate after it reconnects.

[`PURGE BINARY LOGS`](purge-binary-logs.html) should not be issued while a [`LOCK INSTANCE FOR BACKUP`](lock-instance-for-backup.html) statement is in effect for the instance, because it contravenes the rules of the backup lock by removing files from the server. From MySQL 8.0.28, this is disallowed.

 To safely purge binary log files, follow this procedure:

1. On each replica, use [`SHOW REPLICA STATUS`](show-replica-status.html) to check which log file it is reading.

2. Obtain a listing of the binary log files on the source with [`SHOW BINARY LOGS`](show-binary-logs.html).

3. Determine the earliest log file among all the replicas. This is the target file. If all the replicas are up to date, this is the last log file on the list.

4. Make a backup of all the log files you are about to delete. (This step is optional, but always advisable.)

5. Purge all log files up to but not including the target file.

`PURGE BINARY LOGS TO` and `PURGE BINARY LOGS BEFORE` both fail with an error when binary log files listed in the `.index` file had been removed from the system by some other means (such as using **rm** on Linux). (Bug #18199, Bug #18453) To handle such errors, edit the `.index` file (which is a simple text file) manually to ensure that it lists only the binary log files that are actually present, then run again the [`PURGE BINARY LOGS`](purge-binary-logs.html) statement that failed.

 Binary log files are automatically removed after the server's binary log expiration period. Removal of the files can take place at startup and when the binary log is flushed. The default binary log expiration period is 30 days. You can specify an alternative expiration period using the [`binlog_expire_logs_seconds`](replication-options-binary-log.html#sysvar_binlog_expire_logs_seconds) system variable. If you are using replication, you should specify an expiration period that is no lower than the maximum amount of time your replicas might lag behind the source.

