一、查看
1、SQL
(1) 查看所有binlog文件
mysql> show binary logs;
(2) 查看binlog内容
mysql> show binlog events in 'mysql-bin.000001';
2、mysqlbinlog
(1) 查看binlog内容,需要先将二进制文件转换成文本文件再查看(也可以加入start-pos、end-pos、start-date、end-date条件)
[root@localhost]# mysqlbinlog /usrl/local/mysql/data/mysql-bin.000001 > /tmp/log.txt
[root@localhost]# vim /tmp/log.txt
(2) 针对单库导出文件
[root@localhost]# mysqlbinlog -d userdb --stop-datetime='2014-01-26 17:03:35' test-150-bin.000003 > /tmp/recover_ivr.sql
(3) 对文件进行内容过滤,只查看增删改的SQL
[root@tmp]$ more recover_ivr.sql |grep --ignore-case -E 'insert|update|delete' -A2 -B2|grep testtuo > /tmp/recover_ivr_filter.sql
但这里有个问题,例如insert是多行,那么只会显示带有关键字的那一行,因为grep是对单行进行操作的。所以需要把sql中的回车、换行符都换为空格,让sql变为一行,然后使用egrep按需过滤,优化后的语句如下
[root@tmp]$catrecover_ivr.sql | grep -v "#" | tr "\r\n" " " | tr ";" "\n" | egrep -i "insert.*tm_enterprise_info" | tr "\/*\!*\/" ";" > t.sql
注意:如果binlog为row,需要参数解码:--base64-output=decode-rows -v
[root@localhost]# mysqlbinlog mysql-bin.000005 --base64-output=decode-rows -v > /tmp/mysql5l.sq
二、导入
1、 全文件导入
[root@localhost]# mysqlbinlog /var/log/mysql/mysql-bin.000001 | mysql -uroot –p
2、 按指定位置导入,start-pos、end-pos
(1) 从文件头开始导入,截至到601
[root@localhost]# mysqlbinlog /var/log/mysql/mysql-bin.000002 --end-pos=601 | mysql -uroot –p
(2) 从875开始导入
[root@localhost]# mysqlbinlog /var/log/mysql/mysql-bin.000002 --start-pos=875 | mysql -uroot –p
注意:如下,start就是at 后面的数字,end是end_log_pos后面的数字,并不是start、end都是用的at后面的数字
# at 1148
#150901 14:00:52 server id 2 end_log_pos 1233 CRC32 0xdd81aac0 Query thread_id=11593 exec_time=0 error_code=0
SET TIMESTAMP=1441087252/*!*/;
DROP DATABASE `db1`
/*!*/;
# at 1233
#150901 14:00:58 server id 2 end_log_pos 1326 CRC32 0xbbc59f3d Query thread_id=11593 exec_time=0 error_code=0
SET TIMESTAMP=1441087258/*!*/;
CREATE DATABASE `db1`
/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
3、 按时间导入,start-date、end-date
#从该时间开始导入
[root@localhost]# mysqlbinlog /var/log/mysql/mysql-bin.000001 –start-date=”2005-04-20 10:01:00″ | mysql -uroot -p
#从文件头开始导入,截至到该时间
[root@localhost]# mysqlbinlog /var/log/mysql/mysql-bin.000001 –end-date=”2005-04-20 10:01:00″ | mysql -uroot -p
三、删除
1、删除某个日志
[root@localhost]# purge master logs to ‘mysql-bin.0000012′;
2、删除某个时间之前的日志
[root@localhost]# purge master logs before ’2015-08-25 14:52:09′;
3、删除所有日志
[root@localhost]# reset master;
4、重新开始一个日志
[root@localhost]# flush logs;