(4.9)mysql备份还原——binlog查看工具之mysqlbinlog的使用

关键词:mysqlbinlog,mysql binlog查看,二进制文件查看,binlog查看工具,binlog查看方法

 

常用总结:

【1】在test库redo某个binlog中的文件
mysqlbinlog binlog.000011 | mysql -uroot -p123456 test

【2】时间点恢复
mysqlbinlog --stop-datetime='2019-04-24 11:12:00' binlog.000011 | mysql -uroot -p123456 test

【3】时间点重做
mysqlbinlog --start-datetime='2019-04-24 11:30:00' --stop-datetime='2019-04-24 18:10' binlog.000011 | mysql -uroot -p123456 test

【4】读取多个binlog
mysqlbinlog --start-datetime='2016-02-25 00:00:00' --stop-datetime='2016-03-15 17:00:00' mysql-bin.000023 mysql-bin.000024 >a.txt

 

0、mysqlbinlog的功能

  恢复的时候,用于闪回,可以读取日志内容。

  mysqlbinlog --help (linux下),查看参数、使用方法

 

1、mysqlbinlog的各类参数使用

【1.1】默认查看日志

  mysqlbinlog binlog.000001

【1.2】指定数据库

  -d , --databases 

  mysqlbinlog -d test binlog.000001  > 1.txt

  mysqlbinlog --databases test binlog.000001  > 1.txt

【1.3】禁止恢复过程中产生日志

   -D,--disable-log-bin

  mysqlbinlog  --disable-log-bin binlog.000001

【1.4】一直显示正在产生的日志 -to-last-log

  mysqlbinlog  -to-last-log binlog.000001

【1.5】在输出时控制内容的编码显示格式 

  --base64-output:auto,never,decode-rows,unspec

  默认是auto

  -v(-veraose) 是更加详细的,-v -v 是更加详细的

  实践演示:mysqlbinlog  --base64-output=decode-rows -v -v binlog.000001

【1.6】跳过前N个条目显示

  -o 20

  mysqlbinlog -o 20 binlog.000001

【1.7】保存到文件

  -r,或者使用 > 导出

  mysqlbinlog -r 1.txt binlog.000001

  mysqlbinlog binlog.000001 > 1.txt

  mysqlbinlog --server-id=3306 -r 1.txt binlog.000001

【1.8】根据位置开始提取数据

  --start-position=701  --stop-position=1009

  -j pos位置

  

  mysqlbinlog --start-position=701 binlog.000001       (不写stop-position就是默认到尾部)

  mysqlbinlog -j 701

  这个pos值,就是如下值,这2个都可以,或者也可以使用show binlog events 来查看; 

 

【1.9】以二进制方式显示

  -H

  mysqlbinlog -H binlog.000001

【1.10】根据时间提取数据

  --start-datetime  --stop-datetime

  mysqlbinlog --start-datetime='2019-03-11 19:15:34' --stop-datetime='2019-03-11 19:20:27' binlog.000001

【1.11】从远处获取binlog日志

  -R,-h

  mysqlbinlog -R -h 10.10.10.11 -p binlog.000001

【2】最佳实践

(2.1)恢复某个库到某个时间点

假设现在已经是6点,全量是4点的全备,想要恢复某个库到4.30

1、如果库有单独备份则使用

  没有单独备份则截取:

注意,这样的话没有dump文件头部那些参数,根据情况自己斟酌,不过一般也不需要;

库:
sed -n '/^-- Current Database: `test`/,/^-- Current Database: `/p' fulldump.sql > test.sql
表:
sed -n '/^-- Table structure for table `t_a_payback`/, /^-- Table structure for table/p' full.sql > t_a_payback.sql
#这种方法适合dump文件相对较小的情况,否则可能需要处理很长时间,而且一定不能用在线服务的机器处理,搞不好会因为内存不够用导致其他应用程序crash的,谨慎。

 

2、binlog指定单库

根据全备里的 binlog file  和 binlog position;(假设是 binlog.000001 位置是 701)

mysqlbinlog -d test --start-position=701 --stop-datetime='2021-09-08 04:30:00' binlog.000001 |mysql -uroot -p123456

 

(2)恢复多个文件

【1】在test库redo某个binlog中的文件
mysqlbinlog binlog.000011 | mysql -uroot -p123456 test

【2】时间点恢复
mysqlbinlog --stop-datetime='2019-04-24 11:12:00' binlog.000011 | mysql -uroot -p123456 test
3】时间点重做
mysqlbinlog --start-datetime='2019-04-24 11:30:00' --stop-datetime='2019-04-24 18:10' binlog.000011 | mysql -uroot -p123456 test

【4】读取多个binlog
mysqlbinlog --start-datetime='2016-02-25 00:00:00' --stop-datetime='2016-03-15 17:00:00' mysql-bin.000023 mysql-bin.000024 >a.txt

 

【故障排除】

(1)unknown variable 'default-character-set=utf8mb4'

--当报此错时:mysqlbinlog: mysql: [ERROR] unknown variable 'default-character-set=utf8mb4' --加上这个参数就好了:--no-defaults

posted @ 2019-04-21 17:57  郭大侠1  阅读(460)  评论(0编辑  收藏  举报