送给mysql dba们一颗速效救心丸,闪回之binlog2sql

本文介绍了一种MySQL闪回工具的使用方法,通过该工具可以实现MySQL数据库的数据恢复。文章详细展示了从工具安装到闪回的具体步骤,并提供了测试案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做了多年oracle dba,对oralce的闪回是一往情深.如今搞起了mysql,找了个不错的闪回工具,分享给大家吧。


1.下载

https://github.com/danfengcao/binlog2sql

http://rpmfind.net

Search: python-pip

pip 是一个Python包管理工具,主要是用于安装 PyPI 上的软件包


2. 安装

1
2
3
4
5
6
7
# yum install python-setuptools -y
# rpm -ivh python-pip-7.1.0-1.el6.noarch.rpm   --rpmfind.net 下载上传安装
# pip install PyMySQL
# pip install -r requirments.txt
# pwd
/usr/local/binlog2sql-master/binlog2sql-master
# less README.md  --这个必须要看个十遍,八遍的才行


3. 测试用例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(root@localhost) [kk]> create database roidba;
Query OK, 1 row affected (0.00 sec)
  
(root@localhost) [kk]> use roidba
Database changed
(root@localhost) [roidba]> create table roidba (  id  int,name varchar(10));
Query OK, 0 rows affected (0.15 sec)
  
(root@localhost) [roidba]> insert into roidba values(1, 'mysql' );
Query OK, 1 row affected (0.00 sec)
  
(root@localhost) [roidba]> insert into roidba values(2, 'oracle' );
Query OK, 1 row affected (0.00 sec)
  
(root@localhost) [roidba]> insert into roidba values(3, 'mariadb' );
Query OK, 1 row affected (0.00 sec)
(root@localhost) [roidba]> delete from roidba;
Query OK, 3 rows affected (0.01 sec)
(root@localhost) [roidba]>  select  * from roidba;
Empty  set  (0.00 sec)


4. 创建闪回用户

1
2
3
4
5
(root@localhost) [roidba]> GRANT SELECT,REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO flashback@ '%'  identified by  'flashback' ;  
Query OK, 0 rows affected (0.04 sec)
  
(root@localhost) [roidba]> flush privileges;
Query OK, 0 rows affected (0.05 sec)

 

5. 闪回的要求

1
2
3
4
5
6
7
8
9
10
1)知道大概的时间点2017-01-12 18:00 ~ 2017-01-12 18:00
2)知道binlog信息
(root@localhost) [roidba]> show binary logs;
+------------------+----------------+
| Log_name  | File_size |
+------------------+----------------+
| mysql-bin.000001 |3828 |
| mysql-bin.000002 | 238 |
| mysql-bin.000003 |1231 |
+------------------+---------------+

 

6. 解析

1
2
3
4
5
6
7
8
9
10
11
12
--binlog中解析的sql
[root@mysql-121 binlog2sql-master] # python binlog2sql/binlog2sql.py -h192.168.80.132 -P3306 -uflashback -pflashback -droidba -troidba --start-file='mysql-bin.000003' --start-datetime='2017-01-12 18:00:00' --stop-datetime='2017-01-12 18:30:00'
INSERT INTO `roidba`.`roidba`(` id `, `name`) VALUES (1,  'mysql' );  #start 239 end 413 time 2017-01-12 18:10:54
INSERT INTO `roidba`.`roidba`(` id `, `name`) VALUES (2,  'oracle' );  #start 492 end 667 time 2017-01-12 18:11:00
INSERT INTO `roidba`.`roidba`(` id `, `name`) VALUES (3,  'mariadb' );  #start 746 end 922 time 2017-01-12 18:11:08
DELETE FROM `roidba`.`roidba` WHERE ` id `=1 AND `name`= 'mysql'  LIMIT 1;  #start 1001 end 1200 time 2017-01-12 18:11:14
DELETE FROM `roidba`.`roidba` WHERE ` id `=2 AND `name`= 'oracle'  LIMIT 1;  #start 1001 end 1200 time 2017-01-12 18:11:14
DELETE FROM `roidba`.`roidba` WHERE ` id `=3 AND `name`= 'mariadb'  LIMIT 1;  #start 1001 end 1200 time 2017-01-12 18:11:14
USE roidba;
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO  'flashback' @ '%'  IDENTIFIED BY PASSWORD  '*6DE874C277DDA35061BD526FB38B6A3C8B3A9254' ;
USE roidba;
flush privileges;

 

7. 闪回

1
2
3
4
5
6
7
8
--闪回sql
# python binlog2sql/binlog2sql.py -h192.168.80.132 -P3306 -uflashback -p'flashback' -droidba -troidba --start-file='mysql-bin.000003' --start-position=1001 --stop-position=1200 -B > rollback.sql
[root@mysql-121 binlog2sql-master] # less rollback.sql
INSERT INTO `roidba`.`roidba`(` id `, `name`) VALUES (3,  'mariadb' );  #start 1001 end 1200 time 2017-01-12 18:11:14
INSERT INTO `roidba`.`roidba`(` id `, `name`) VALUES (2,  'oracle' );  #start 1001 end 1200 time 2017-01-12 18:11:14
INSERT INTO `roidba`.`roidba`(` id `, `name`) VALUES (1,  'mysql' );  #start 1001 end 1200 time 2017-01-12 18:11:14
--开始回滚
[root@mysql-121 binlog2sql-master] # mysql -ubackup -pbackup -h192.168.80.132 <./rollback.sql   --具有插入权限才可以

8.验证

自己多测试,多动手,看别人做很简单,其实真的自己上手就不一定了,少说多做,少扯淡。











本文转自 roidba 51CTO博客,原文链接:http://blog.51cto.com/roidba/1891595,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值