删除MySQL数据库的二进制日志手动与自动的方法


今天一上服务器发现Mysql的二进制有10几个了每个都是1G的,再晚点来关注的话可能空间就不够用了。
我是开启了主从复制所以才打开了二进制日志,一般来说不使用事务,不需要开启二进制日志。
一般来说要是使用了主从复制的服务器,先需要检测主从是否正常运行,要是跑得正常的话,除最后一个二进制日志文件以外其他都可以删除。
看看我这日志老大个了。一直忘记了清理,今日和大家来分享一下日志的清理方式:
-rw-rw----  1 mysql  mysql   1.0G Mar 10 17:34 mysql-bin.000001
-rw-rw----  1 mysql  mysql   1.0G Mar 15 19:25 mysql-bin.000002
-rw-rw----  1 mysql  mysql   1.0G Mar 25 11:56 mysql-bin.000003
-rw-rw----  1 mysql  mysql   1.0G Apr 14 10:30 mysql-bin.000004
-rw-rw----  1 mysql  mysql   1.0G Apr 16 11:31 mysql-bin.000005
-rw-rw----  1 mysql  mysql   1.0G Apr 22 15:35 mysql-bin.000006
-rw-rw----  1 mysql  mysql   1.0G Apr 27 00:26 mysql-bin.000007
-rw-rw----  1 mysql  mysql   1.0G Apr 29 23:38 mysql-bin.000008
-rw-rw----  1 mysql  mysql   299M Apr 30 15:02 mysql-bin.000009
-rw-rw----  1 mysql  mysql   500M Apr 30 18:39 mysql-bin.000010
-rw-rw----  1 mysql  mysql   500M May  4 18:30 mysql-bin.000011
-rw-rw----  1 mysql  mysql   500M May  4 23:19 mysql-bin.000012
-rw-rw----  1 mysql  mysql   500M May  5 17:44 mysql-bin.000013
-rw-rw----  1 mysql  mysql   500M May  6 18:26 mysql-bin.000014
-rw-rw----  1 mysql  mysql   500M May  7 18:45 mysql-bin.000015
-rw-rw----  1 mysql  mysql   500M May 11 22:07 mysql-bin.000016
-rw-rw----  1 mysql  mysql   500M May 18 05:27 mysql-bin.000017
-rw-rw----  1 mysql  mysql    31M May 18 16:57 mysql-bin.000018
-rw-rw----  1 mysql  mysql   342B May 18 05:27 mysql-bin.index


1、手动定期清理:
如果使用phpmyadmin管理工具的话,使用root用户或有系统权限的账号登陆数据库,查询你的最后一个日志文件的名称是什么,以上我的是“mysql-bin.000018”。
直接执行SQL语句: purge master logs to 'binary-log.xxx';
这条语句是只保留某日志,其他全部清理掉。
比如我只需要保留mysql-bin.000018执行语句是: purge master logs to 'mysql-bin.000018';

注意:如果有主从复制的MYSQL服务器群,一定要检测主从的复制是否正常,否则一旦删除了二进制日志,可能会影响到有异常而被停止挂起的主从复制。

2、自动清理:
自动清理比较简单,MYSQL启动项中有个参数变量“expire_logs_days”表示自动清理二进制日志的天数,通常在设置日志回滚、重启、flush的情况下被激活。
可以通过查询语句检测当前的设置情况:

mysql> show variables LIKE '%expire_logs_days%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| expire_logs_days | 0     |
+------------------+-------+
1 row in set (0.00 sec)

比如我设置自动清理2天前的日志,动态【临时】的设置方法是:
mysql> set global expire_logs_days=2;
下次启动时将恢复到默认值,

想要永久的设置这个选项,直接将expire_logs_days=2;加入到Mysql的配置文件my.cnf的“[mysqld]”区域中即可;
配置好之后重启MYSQL服务即可。