mysql-bin.000001文件的来源及处理方法

jackxiang 2011-3-24 22:25 | |
  用ports安装了mysql以后,过一段时间发现/var空间不足了,查一下,会发现是mysql-bin.000001、mysql-bin.000002等文件占用了空间,那么这些文件是干吗的?这是数据库的操作日志,例如UPDATE一个表,或者DELETE一些数据,即使该语句没有匹配的数据,这个命令也会存储到日志文件中,还包括每个语句执行的时间,也会记录进去的。

这样做主要有以下两个目的:
1:数据恢复
如果你的数据库出问题了,而你之前有过备份,那么可以看日志文件,找出是哪个命令导致你的数据库出问题了,想办法挽回损失。
2:主从服务器之间同步数据
主服务器上所有的操作都在记录日志中,从服务器可以根据该日志来进行,以确保两个同步。

处理方法分两种情况:
1:只有一个mysql服务器,那么可以简单的注释掉这个选项就行了。
vi /etc/my.cnf把里面的log-bin这一行注释掉,重启mysql服务即可。
2:如果你的环境是主从服务器,那么就需要做以下操作了。
A:在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。
B:使用SHOW MASTER LOGS获得主服务器上的一系列日志。
C:在所有的从属服务器中判定最早的日志,这个是目标日志,如果所有的从属服务器是更新的,就是清单上的最后一个日志。
D:清理所有的日志,但是不包括目标日志,因为从服务器还要跟它同步。
清理日志方法为:
PURGE MASTER LOGS TO 'mysql-bin.010';
PURGE MASTER LOGS BEFORE '2008-12-19 21:00:00';

如果你确定从服务器已经同步过了,跟主服务器一样了,那么可以直接RESET MASTER将这些文件删除。


====================================================================
删除MYSQl BIN-LOG 日志
想要恢愎数据库以前的资料,执行:show binlog events;屏幕就开始显示很多内容,心里烦(那有这么多没有用的LOG),还是删除一些去吧!
1.查找当
mysql> show binary logs;
+—————-+———–+
| Log_name | File_size |
+—————-+———–+
| mysql-bin.000001 | 150462942 |
| mysql-bin.000002 | 125 |
| mysql-bin.000003 | 106 |
+—————-+———–+
2.删除bin-log(删除mysql-bin.000003之前的而没有包含mysql-bin.000003)
mysql> purge binary logs to ‘mysql-bin.000003′;
Query OK, 0 rows affected (0.16 sec)
3. 查询结果(现在只有一条记录了.)
mysql> show binlog events\G
*************************** 1. row ***************************
Log_name: mysql-bin.000003
Pos: 4
Event_type: Format_desc
Server_id: 1
End_log_pos: 106
Info: Server ver: 5.1.26-rc-log, Binlog ver: 4
1 row in set (0.01 sec)
(mysql-bin.000001和mysql-bin.000002已被删除)
mysql> show binary logs;
+—————-+———–+
| Log_name | File_size |
+—————-+———–+
| mysql-bin.000003 | 106 |
+—————-+———–+
1 row in set (0.00 sec)
(删除的其它格式运用!)
  PURGE {MASTER | BINARY} LOGS TO ‘log_name’
  PURGE {MASTER | BINARY} LOGS BEFORE ‘date’
  用于删除列于在指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件中的清单中被删除,这样被给定的日志成为第一个。
  例如:
  PURGE MASTER LOGS TO ‘mysql-bin.010′;
  PURGE MASTER LOGS BEFORE ’2008-06-22 13:00:00′;
清除3天前的 binlog
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);
  BEFORE变量的date自变量可以为’YYYY-MM-DD hh:mm:ss’格式。MASTER和BINARY是同义词。
  如果您有一个活性的从属服务器,该服务器当前正在读取您正在试图删除的日志之一,则本语句不会起作用,而是会失败,并伴随一个错误。不过,如果从属服务器是休止的,并且您碰巧清理了其想要读取的日志之一,则从属服务器启动后不能复制。当从属服务器正在复制时,本语句可以安全运行。您不需要停止它们。
  要清理日志,需按照以下步骤:
  1. 在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。
  2. 使用SHOW MASTER LOGS获得主服务器上的一系列日志。
  3. 在所有的从属服务器中判定最早的日志。这个是目标日志。如果所有的从属服务器是更新的,这是清单上的最后一个日志。
  4. 制作您将要删除的所有日志的备份。(这个步骤是自选的,但是建议采用。)
  5. 清理所有的日志,但是不包括目标日志。


那么这些文件该怎么删除和禁止呢?
禁止方法: vi /etc/my.cnf把里面的
#log-bin=mysql-bin
#binlog_format=mixed
注释掉,重启mysql服务即可.
删除方法:
输入命令:
/usr/local/mysql/bin/mysql -u root -p
输入密码登陆mysql后,运行命令:
reset master;
(包括;号)
清空日志文件.再查看Mysql文件的大小,已经小了很多了.
-bash-3.2# du -h –max-depth=1 /usr/local/mysql/var
du: cannot access `250Cmax-depth=1': No such file or directory
142M    /usr/local/mysql/var

mysql-bin 日志文件的清除
对于一个繁忙的mysql数据库而言,日志文件日渐增多增大。必须加以删除或控制。
更改配置文件不让产生 mysql-bin 文件:
vi /etc/my.cnf
找到如下几行信息:
# Replication Master Server (default)
# binary logging is required for replication
log-bin=mysql-bin
把 log-bin 这一行注释掉即可。
完毕,需要重新启动mysqld使配置生效。
删除现有的 mysql-bin 文件:
进入mysql:
/usr/local/mysql/bin/mysql -u root -p
然后,执行如下命令:
reset master;


如果你安装的MYSQL启用了记录日志功能,那就会占用很多空间,甚至可能把你所有的空间都耗光,这是非常可怕的,而且这一切都在悄悄的进行,你完全感受不到……
mysql-bin.0000X文件通常在MYSQL安装文件夹的var目录,我的是/usr/local/mysql/var/,如果你的不在这里,那就找一下……
好了,下面我就来提供解决方案,首先打开/etc/my.cnf文件,找到下面的内容,需要注意的是,log-bin和binlog_format这2行内容,并不是在一起的,然后注释掉。
log-bin=mysql-bin
binlog_format=mixed
注释方法很简单,在他们前面加 一个#符号就可以了,接着把mysql-bin.0000X的日志文件删除掉。
然后执行这个命令
/usr/local/mysql/bin/mysql -u root -p
输入密码登陆后执行reset master命令。如果成功的话不会返回任何信息,如果失败则会出现提示,到此问题就解决啦!


mysql-bin.000001、mysql-bin.000002等文件是数据库的操作日志,例如UPDATE一个表,或者DELETE一些数据,即使该语句没有匹配的数据,这个命令也会存储到日志文件中,还包括每个语句执行的时间,也会记录进去的。

这样做主要有以下两个目的:
1:数据恢复
如果你的数据库出问题了,而你之前有过备份,那么可以看日志文件,找出是哪个命令导致你的数据库出问题了,想办法挽回损失。
2:主从服务器之间同步数据
主服务器上所有的操作都在记录日志中,从服务器可以根据该日志来进行,以确保两个同步。

处理方法分两种情况:
1:只有一个mysql服务器,那么可以简单的注释掉这个选项就行了。
vi /etc/my.cnf把里面的log-bin这一行注释掉,重启mysql服务即可。
2:如果你的环境是主从服务器,那么就需要做以下操作了。
A:在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。
B:使用SHOW MASTER LOGS获得主服务器上的一系列日志。
C:在所有的从属服务器中判定最早的日志,这个是目标日志,如果所有的从属服务器是更新的,就是清单上的最后一个日志。
D:清理所有的日志,但是不包括目标日志,因为从服务器还要跟它同步。
清理日志方法为:
PURGE MASTER LOGS TO ‘mysql-bin.010′;
PURGE MASTER LOGS BEFORE ‘2008-12-19 21:00:00′;

如果你确定从服务器已经同步过了,跟主服务器一样了,那么可以直接RESET MASTER将这些文件删除。

mysql> PURGE MASTER LOGS BEFORE '2011-03-13 21:00:00';
Query OK, 0 rows affected (0.04 sec)

mysql> PURGE MASTER LOGS TO 'mysql-bin.000007';
Query OK, 0 rows affected (0.00 sec)

mysql> show binary logs;
ERROR 1381 (HY000): You are not using binary logging

来源:http://www.amcoding.com/faq/mysql-bin-%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%E7%9A%84%E6%B8%85%E9%99%A4/

http://imcat.in/delete-mysql-bin-0000x-mysql-log-file/
http://www.jiucool.com/terror-mysql-bin-0000x-log-file/
http://doc.linuxpk.com/56482.html
http://ourmysql.com/archives/568

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/4144/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2011-3-24 22:45
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]