MySQL binlog

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

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

1、查看大小

每次重启就会产生一个。

mysql> show binary logs;

2、查看配置

默认最大是1G

mysql> show global variables like '%bin%';
+-----------------------------------------+----------------------+
| Variable_name                           | Value                |
+-----------------------------------------+----------------------+
| binlog_cache_size                       | 32768                |
| binlog_direct_non_transactional_updates | OFF                  |
| binlog_format                           | MIXED                |
| binlog_stmt_cache_size                  | 32768                |
| innodb_locks_unsafe_for_binlog          | OFF                  |
| log_bin                                 | ON                   |
| log_bin_trust_function_creators         | OFF                  |
| max_binlog_cache_size                   | 18446744073709547520 |
| max_binlog_size                         | 1073741824           |
| max_binlog_stmt_cache_size              | 18446744073709547520 |
| sql_log_bin                             | ON                   |
| sync_binlog                             | 0                    |
+-----------------------------------------+----------------------+
12 rows in set (0.00 sec)

 3、清除日志

3.1 RESET MASTER

执行RESET MASTER命名删除全部日志

mysql> reset master;
Query OK, 0 rows affected (8.51 sec)

可以看到,以前的日志全部被清空,新的日志从00001开始。

3.2 PURGE MASTER LOGS TO & PURGE MASTER LOGS BEFORE
执行PURGE MASTER LOGS TO 'mysql-bin.******'命令,是将'******'编号之前的所有日志进行删除
执行PURGE MASTER LOGS BEFORE 'yyyy-mm-dd hh:mm:ss'命令,是将在'yyyy-mm-dd hh:mm:ss'时间之前的所有日志进行删除

 4、配置日志

4.1 设置日志保留时长expire_logs_days自动删除

查看当前日志保存天数:

show variables like ‘%expire_logs_days%’;

这个默认是0,也就是logs不过期,可通过设置全局的参数,使他临时生效:

set global expire_logs_days=7;

设置了只保留7天BINLOG, 下次重启mysql这个参数默认会失败,所以需在my.cnf中设置

expire_logs_days = 7

 5、误删恢复

使用binlog恢复数据:   
         
使用mysqlbinlog命令恢复日志   
         
mysqlbinlog -d test /root/mysql/mysql-bin.000001|mysql -uroot -ppassword     
              
#1、关于mysqlbinlog在mysql 5.0上的使用方法,可以参考:官方资料   
         
#2、如果不知道log-bin存放的文件位置,可以使用下面的命令查看:   
         
mysql -uroot -ppassword -e 'SHOW BINLOG EVENTS G'   
         
#3、当只是需要恢复部分记录的时候,你可以使用时间点或位置点来定位,例如:     
         
mysqlbinlog --start-date="2005-04-20 9:01:00" --stop-date="2005-04-20 10:00:01" /var/log/mysql/bin.123456|mysql -uroot -ppassword[code]       
         
#意思是恢复4月20日早上9点到10点这一段时间的数据。    
         
mysqlbinlog --start-position="368301" --stop-position="368312"/var/log/mysql/bin.123456| mysql -uroot -pmypwd       
         
#意思是重做368301到368312位置点之间的操作。(位置点可以就是用mysqlbinlog看到的at xxx节点)       
         
mysqlbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-20 10:05:00" /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql       
         
#同样的,如果我们只是想查看某段时间的操作,直接把它导到一个文件即可。

posted on 2013-08-27 13:33  TrustNature  阅读(267)  评论(0编辑  收藏  举报