最近一位客户委托万维景盛工程师维护数据库,发现客户MYSQL数据库的DATA目录下有大量mysql-bin.00001文件。每个文件都很大。那么这是什么文件呢?可否清理呢?
-rw-rw---- 1 mysql mysql 5242880 Feb 27 14:49 ib_logfile0
-rw-rw---- 1 mysql mysql 5242880 Dec 27 17:55 ib_logfile1
-rw-rw---- 1 mysql mysql 588M Mar 12 02:03 maria_log.00000003
-rw-rw---- 1 mysql mysql 52 Mar 12 01:54 maria_log_control
drwx------ 2 mysql root 4.0K Jan 15 14:28 mysql
-rw-rw---- 1 mysql mysql 20K Dec 27 17:54 mysqld-bin.000001
-rw-rw---- 1 mysql mysql 715K Dec 27 17:54 mysqld-bin.000002
-rw-rw---- 1 mysql mysql 625 Dec 28 11:46 mysqld-bin.000003
-rw-rw---- 1 mysql mysql 125 Dec 27 18:20 mysqld-bin.000004
-rw-rw---- 1 mysql mysql 1.1K Feb 27 14:49 mysqld-bin.index
mysql-bin.000001、mysql-bin.000002等文件是数据库的操作日志,例如UPDATE一个表,或者DELETE一些数据,即使该语句没有匹配的数据,这个命令也会存储到日志文件中,还包括每个语句执行的时间,也会记录进去的。这主要是用于操作审查和多数据库同步的。ib_logfile则是用来记录InnoDB的表一致性的,只有在当机后才能发挥作用:
1:数据恢复
如果你的数据库出问题了,而你之前有过备份,那么可以看日志文件,找出是哪个命令导致你的数据库出问题了,想办法挽回损失。
2:主从服务器之间同步数据
主服务器上所有的操作都在记录日志中,从服务器可以根据该日志来进行,以确保两个同步。
但是对于一般用户来说,没有主从数据库,也不用审查操作,这些文件完全没有任何用处!因此,首先清理一下这些文件。然后编辑mysql配置文件,打开/etc/mysql/my.cnf,把里面的log-bin这一行注释掉。
清理日志方法为:
PURGE MASTER LOGS TO 'mysql-bin.010';
PURGE MASTER LOGS BEFORE '2008-12-19 21:00:00';
如果你确定从服务器已经同步过了,跟主服务器一样了,那么可以直接RESET MASTER将这些文件删除。