您的位置:首页 > 数据库

binlog2sql

2020-02-03 21:40 976 查看

看到使用binlog2sql恢复数据,测试玩玩~
环境:CentOS6.5源码安装多个MySQL实例及复制搭建
由于原先的复制采用binlog-format=mixed,先将其修改为binlog-format=row

/******** 测试环境,步骤简化 ********/
#Master上操作
[root@VMUest ~]# mysqldump -uroot -p -P3306 --databases db_swzf jbts --master-data=2 --lock-all-tables > /myshare/user_db.sql
[root@VMUest ~]# cat /myshare/user_db.sql |grep -i 'change'
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000048', MASTER_LOG_POS=120;
#Slave上操作
mysql> change master to
master_host='192.168.85.129',
master_port=3306,
master_user='repl',
master_password='repl',
master_log_file='mysql-bin.000048',
master_log_pos=120;
View Code

binlog2sql安装

#检测是否安装git、pip
[root@VMUest ~]# git --help
[root@VMUest ~]# pip --help
#安装git、pip
[root@VMUest ~]# yum -y install git
[root@VMUest ~]# yum -y install epel-release
[root@VMUest ~]# yum -y install python-pip
#安装
[root@VMUest ~]# cd /tools/
[root@VMUest tools]# git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql
[root@VMUest binlog2sql]# pip install -r requirements.txt

binlog2sql使用

[root@VMUest binlog2sql]# python binlog2sql.py -h192.168.85.129 -P3306 -umydba -p'mysql5635' -ddb_swzf -tarea_info --start-file='mysql-bin.000047'
python: can not open file 'binlog2sql.py': [Errno 2] No such file or directory
#查找文件位置
[root@VMUest binlog2sql]# find / -type f -name "binlog2sql.py"
/tools/binlog2sql/binlog2sql/binlog2sql.py
[root@VMUest binlog2sql]# pwd
/tools/binlog2sql
[root@VMUest binlog2sql]# cd /tools/binlog2sql/binlog2sql/
[root@VMUest binlog2sql]# python binlog2sql.py -h192.168.85.129 -P3306 -umydba -p'mysql5635' -ddb_swzf -tarea_info --start-file='mysql-bin.000047'

测试样例

#准备测试数据
mysql> CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`create_time` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> insert into test (name,create_time) values ('Glon Ho','2012-10-1'),('Eason Chan', '2016-05-02'),('Jacky Cheung', '2015-05-02');
mysql> update test set create_time = '2017-05-12' where name = 'Glon Ho';
mysql> delete from test where name = 'Jacky Cheung';
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000048 |     1068 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
View Code

样例解析

#直接整个解析 mysql-bin.000048 日志
[root@VMUest binlog2sql]# python binlog2sql.py -h192.168.85.129 -P3306 -umydba -p'mysql5635' -dtest -ttest --start-file='mysql-bin.000048'
USE test;
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`create_time` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `test`.`test`(`create_time`, `id`, `name`) VALUES ('2012-10-01 00:00:00', 1, 'Glon Ho'); #start 376 end 597 time 2017-05-23 17:08:57
INSERT INTO `test`.`test`(`create_time`, `id`, `name`) VALUES ('2016-05-02 00:00:00', 2, 'Eason Chan'); #start 376 end 597 time 2017-05-23 17:08:57
INSERT INTO `test`.`test`(`create_time`, `id`, `name`) VALUES ('2015-05-02 00:00:00', 3, 'Jacky Cheung'); #start 376 end 597 time 2017-05-23 17:08:57
UPDATE `test`.`test` SET `create_time`='2017-05-12 00:00:00', `id`=1, `name`='Glon Ho' WHERE `create_time`='2012-10-01 00:00:00' AND `id`=1 AND `name`='Glon Ho' LIMIT 1; #start 628 end 824 time 2017-05-23 17:26:57
DELETE FROM `test`.`test` WHERE `create_time`='2015-05-02 00:00:00' AND `id`=3 AND `name`='Jacky Cheung' LIMIT 1; #start 855 end 1037 time 2017-05-23 17:27:20
[root@VMUest binlog2sql]#
#按位置解析出回滚SQL
[root@VMUest binlog2sql]# python binlog2sql.py --flashback -h192.168.85.129 -P3306 -umydba -p'mysql5635' -dtest -ttest --start-file='mysql-bin.000048' --start-position=376 --stop-position=597
DELETE FROM `test`.`test` WHERE `create_time`='2015-05-02 00:00:00' AND `id`=3 AND `name`='Jacky Cheung' LIMIT 1; #start 376 end 597 time 2017-05-23 17:08:57
DELETE FROM `test`.`test` WHERE `create_time`='2016-05-02 00:00:00' AND `id`=2 AND `name`='Eason Chan' LIMIT 1; #start 376 end 597 time 2017-05-23 17:08:57
DELETE FROM `test`.`test` WHERE `create_time`='2012-10-01 00:00:00' AND `id`=1 AND `name`='Glon Ho' LIMIT 1; #start 376 end 597 time 2017-05-23 17:08:57
#按时间解析出回滚SQL
[root@VMUest binlog2sql]# python binlog2sql.py --flashback -h192.168.85.129 -P3306 -umydba -p'mysql5635' -dtest -ttest --start-file='mysql-bin.000048' --start-datetime="2017-05-23 17:26:57" --stop-datetime="2017-05-23 17:27:21"
INSERT INTO `test`.`test`(`create_time`, `id`, `name`) VALUES ('2015-05-02 00:00:00', 3, 'Jacky Cheung'); #start 855 end 1037 time 2017-05-23 17:27:20
UPDATE `test`.`test` SET `create_time`='2012-10-01 00:00:00', `id`=1, `name`='Glon Ho' WHERE `create_time`='2017-05-12 00:00:00' AND `id`=1 AND `name`='Glon Ho' LIMIT 1; #start 628 end 824 time 2017-05-23 17:26:57

注意flashback只会解析DML,对于DDL 不会输出。可使用mysqlbinlog/show binlog events或者Percona Toolkit查看二进制日志。

转载于:https://www.cnblogs.com/ShanFish/p/6895401.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
a510196774 发布了0 篇原创文章 · 获赞 0 · 访问量 74 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: