MySQL数据库中,mysql-bin.000001mysql- 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




11-10 07:42
查看更多