原文网址:MySQL--binlog日志手动删除与自动清理-CSDN博客
简介
本文介绍如何MySQL的binlog日志如何手动删除与自动清理。
默认情况下,MySQL会生成binlog日志,在增删改操作时会往binlog写数据。通过binlog记录可以找到增删改日志,可以将数据恢复到某条日志对应的时间点,可以用于数据库被误删、被攻击时进行恢复。
问题描述
默认情况下,mysql会生成很多个binlog,占用很大的空间。
查询binlog的方法如下:
法1:用MySQL命令
bash
SHOW BINARY LOGS
结果如下(下边最大已经到了1G多):

法2:到MySQL服务器查文件
到MySQL数据路径下,执行命令:ls -lh

解决方案
方案是:删除旧的binlog,只保留最近的binlog;修改binlog的过期时间(默认一直存活),比如:2天。
方案1. 手动删除binlog
使用MySQL提供的purge命令删除binlog。purge命令的定义如下:
法1:指定文件名
将BINLOG-FILE-NAME之前日期的(不包括自己本身)所有binlog文件清理掉。
bash
PURGE {BINARY | MASTER} LOGS TO "BINLOG-FILE-NAME"
例如:
bash
PURGE BINARY LOGS TO 'mysql-bin.000007';
法2:指定时间
将最后修改时间早于datetime-rxpr的binlog文件清理掉(不包括自己)。
bash
PURGE {BINARY | MASTER} LOGS BEFORE "DATETIME-EXPR"
例如:
bash
PURGE BINARY LOGS BEFORE '2015-11-29 00:00:00';
方案2. 修改binlog过期时间
binlog_expire_logs_seconds参数可以控制binlog过期秒数,过了指定时间的日志将被自动删除,可动态修改。
- 如果设置了非0值,则在mysqld启动和日志刷新时,可能执行清理超过定义时间的binlog file
- 默认值为2592000(30天)。
查看binlog_expire_logs_seconds的方法:
bash
SHOW GLOBAL VARIABLES LIKE 'BINLOG_EXPIRE_LOGS_SECONDS';
结果如下图所示:

法1:修改配置文件(需重启MySQL)
修改配置文件:/etc/my.cnf,在[mysqld]节点中增加如下内容
bash
# binlog过期时间设置为3天。默认为30天。
binlog_expire_logs_seconds=259200
法2:使用命令(不需重启MySQL)
bash
SET GLOBAL BINLOG_EXPIRE_LOGS_SECONDS=259200;
如下图所示:
