mysql log-bin 日志文件

前段时间有人向我反映说我的VPS无法上传文件了,我登录上去一查,原来是VPS的磁盘空间已经差不多满了,FTP在可用空间少于10%的时候就拒绝上传文件了。当时因为工作忙,没有时间细查,只是把一些临时文件清理了让他不要再往网站上添加资料就放到一边了。今天记起这件事,怎么也想不明白平时的网页文件,应该占用不了这么多的空间的啊,到底是谁把我的空间吃掉了呢?

于是就开始一个个目录的排查,整个存放网页文件的目录占用的空间只是差不多2G而已,就算系统文件占了3G,那剩下的空间用在了哪里呢?最值得怀疑的就是/var下面的日志文件了,du一查看,果然是一个/var文件夹就占用了差不多5G空间!再继续深入,发现是/var/lib/mysql这个目录就占了差不多4G。再看这个目录下面,有三四十个这样的文件:

mysql-bin.000001
mysql-bin.000002
mysql-bin.000003
mysql-bin.000004
mysql-bin.000005
……

有不少文件个头还不小,几百M的都有,难怪会没有空间了。上网一查,原来这些都是mysql的日志文件,记录着每一次的数据库操作记录,想想服务器上差不多两年的数据库操作记录,没有这么大才怪呢!

下面是一些对此类日志处理的mysql命令:
查找当前有哪些二进制日志文件

mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |   1357315 |
| mysql-bin.000002 |       117 |
| mysql-bin.000003 |    404002 |
| mysql-bin.000004 |   2050722 |
| mysql-bin.000005 |    139103 |
| mysql-bin.000006 |     46702 |
| mysql-bin.000007 |       117 |
…………

删除bin-log(删除mysql-bin.000018之前的所有二进制日志文件)

mysql> purge binary logs to 'mysql-bin.000018';
Query OK, 0 rows affected (0.08 sec)

其实,bin-log文件主要用于几台服务器之间的数据库同步,如果只有一台服务器并且不考虑同步的话,可以把这个功能禁用掉。但是,很多时候这一类的日志文件还是很有用的,比如说你不记得做了什么把数据弄丢了,这时这些操作日志就可以帮到你了,所以保留一段时间的日志是很有必要的。可以在/etc/mysql/my.cnf文件里这样设置:

log-bin
expire_logs_days = 30

这里的数字“30”就是要保留日志的天数,30天前的日志就会自动删除,这样一来就解决掉问题了。修改后重启mysql服务,我的服务器的可用空间一下子增加到了40%以上了,又可以撑很长一段时间的了。