在MySQL数据库中,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将这些文件删除。
[root@jiucool var]# /usr/local/mysql/bin/mysql -u root -p Enter password: (输入密码)
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 264001 Server version: 5.1.35-log Source distribution
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql> reset master; (清除日志文件) Query OK, 0 rows affected (8.51 sec) mysql>
好了,我们再来查看下mysql文件夹占用多少空间?
[root@jiucool var]# du -h –max-depth=1 /usr/local/mysql/ 37M
/usr/local/mysql/var 70M
/usr/local/mysql/mysql-test 15M
/usr/local/mysql/lib 448K
/usr/local/mysql/include 2.9M
/usr/local/mysql/share 7.6M
/usr/local/mysql/libexec 17M
/usr/local/mysql/bin 11M
/usr/local/mysql/docs 2.9M
/usr/local/mysql/sql-bench 163M
/usr/local/mysql/
好了,看一下,整个mysql目录才占用163M大小!OK,没问题,既然mysql-bin.0000X日志文件占用这么大空间,存在的意义又不是特别大,那么我们就不让它生成吧。
[root@jiucool var]# find / -name my.cnf
找到了my.cnf 即mysql配置文件,我们将log-bin=mysql-bin 这条注释掉即可.
# Replication Master Server (default) # binary logging is required for replication # log-bin=mysql-bin
在Mysql中,如果启用mysql-bin日志记录,则Mysql的变更修改都会被记录到日志文件中:
如果使用了配置文件,则可以修改 /etc/my.cnf 把里面的log-bin这一行注释掉,重启mysql服务即可关闭bin日志的记录。
一个客户的数据库,积累了大量的bin日志:
如果没有主从复制,可以通过reset master的方式,重置数据库日志,清除之前的日志文件:
但是如果存在复制关系,应当通过PURGE的方式来清理bin日志:
语法如下:
常用的命令:
供参考。
mysqlbinlog 查看mysql bin 日志
mysqlbinlog mysql-bin.000036 | less
查询包含几个字段的语句:
mysqlbinlog mysql-bin.000036| egrep '(2011030610002460|2011030310001730|2011030410011680|2011030410006280)'
mysqlbinlog查看二进制日志的问题 在使用mysqlbinlog查看日志的时候碰到了一个问题, 错误提示如下: /usr/local/mysql/bin/mysqlbinlog: unknown variable 'default-character-set=utf8' 产生这个问题的原因是因为我在my.cnf中的client选项组中添加了 default-character-set=utf8 要解决这个bug的方法还是有的, 一种方法是使用:--no-defaults ./mysqlbinlog --no-defaults mysql-bin.000063 另一种方法:使用mysqlbinlog工具查看二进制日志时会重新读取的mysql的配置文件my.cnf(windows下是my.ini),而不是服务器已经加载进内存的配置文件。也就是说只要修改并保存了my.cnf文件,而不需要重起mysql服务器,则使用mysqlbinlog查看时修改后的my.cnf配置文件对mysqlbinlog而言已经生效。所以这里可以使用此方法:把client选项组中default-character-set=utf8选项屏蔽掉,如 #default-character-set=utf8 然后运行mysqlbinlog工具,则不会产生任何问题了。当然记得在不在使用mysqlbinlog工具时,把#default-character-set=utf8 选项恢复为default-character-set=utf8 |