PURGE { BINARY | MASTER } LOGS { TO 'log_name
' | BEFOREdatetime_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.2.3, “The Binary Log”).
The PURGE BINARY LOGS
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.
This statement has no effect if the server was not started with
the --log-bin
option to enable
binary logging.
Examples:
PURGE BINARY LOGS TO 'mysql-bin.010'; PURGE BINARY LOGS BEFORE '2008-04-02 22:46:26';
The BEFORE
variant's
datetime_expr
argument should
evaluate to a DATETIME
value (a
value in 'YYYY-MM-DD hh:mm:ss'
format).
This statement is safe to run while slaves are replicating. You need not stop them. If you have an active slave that currently is reading one of the log files you are trying to delete, this statement does nothing and fails with an error. However, if a slave is not connected and you happen to purge one of the log files it has yet to read, the slave will be unable to replicate after it reconnects.
To safely purge binary log files, follow this procedure:
On each slave server, use SHOW SLAVE
STATUS
to check which log file it is reading.
Obtain a listing of the binary log files on the master
server with SHOW BINARY LOGS
.
Determine the earliest log file among all the slaves. This is the target file. If all the slaves are up to date, this is the last log file on the list.
Make a backup of all the log files you are about to delete. (This step is optional, but always advisable.)
Purge all log files up to but not including the target file.
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.3, “Server System Variables”).
If you are using replication, you should set the variable no
lower than the maximum number of days your slaves might lag
behind the master.
Prior to MySQL 5.0.60, PURGE BINARY LOGS TO
and PURGE BINARY LOGS BEFORE
did not behave
in the same way (and neither one behaved correctly) 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). Beginning with MySQL 5.0.60,
both variants of the statement fail with an error in such cases.
(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
statement that
failed.
User Comments
Add your own comment.