#git clone https://github.com/danfengcao/binlog2sql.git
Cloning into 'binlog2sql'...
remote: Counting objects: 294, done.
remote: Total 294 (delta 0), reused 0 (delta 0), pack-reused 294
Receiving objects: 100% (294/294), 142.05 KiB | 109.00 KiB/s, done.
Resolving deltas: 100% (152/152), done.
[root@db210_15:21:00 /opt]
#cd binlog2sql/
[root@db210_15:21:06 /opt/binlog2sql]
#ll
total 52
drwxr-xr-x 2 root root 69 Aug 2 15:21 binlog2sql
drwxr-xr-x 2 root root 53 Aug 2 15:21 example
-rw-r--r-- 1 root root 35141 Aug 2 15:21 LICENSE
-rw-r--r-- 1 root root 9517 Aug 2 15:21 README.md
-rw-r--r-- 1 root root 54 Aug 2 15:21 requirements.txt
drwxr-xr-x 2 root root 36 Aug 2 15:21 tests
[root@db210_15:21:07 /opt/binlog2sql]
#pip install -r requirements.txt // 安装依赖包
Collecting PyMySQL==0.7.11 (from -r requirements.txt (line 1))
Downloading https://files.pythonhosted.org/packages/c6/42/c54c280d8418039bd2f61284f99cb6d9e0eae80383fc72ceb6eac67855fe/PyMySQL-0.7.11-py2.py3-none-any.whl (78kB)
100% |████████████████████████████████| 81kB 444kB/s
Collecting wheel==0.29.0 (from -r requirements.txt (line 2))
Downloading https://files.pythonhosted.org/packages/8a/e9/8468cd68b582b06ef554be0b96b59f59779627131aad48f8a5bce4b13450/wheel-0.29.0-py2.py3-none-any.whl (66kB)
100% |████████████████████████████████| 71kB 1.9MB/s
Collecting mysql-replication==0.13 (from -r requirements.txt (line 3))
Downloading https://files.pythonhosted.org/packages/dd/23/384047702e694139e9fe75a8ba7ad007e8942fd119ebadabc32ce19f70f2/mysql-replication-0.13.tar.gz
Installing collected packages: PyMySQL, wheel, mysql-replication
Found existing installation: PyMySQL 0.8.1
Uninstalling PyMySQL-0.8.1:
Successfully uninstalled PyMySQL-0.8.1
Running setup.py install for mysql-replication ... done
Successfully installed PyMySQL-0.7.11 mysql-replication-0.13 wheel-0.29.0
You are using pip version 8.1.2, however version 18.0 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
[root@db210_15:21:31 /opt/binlog2sql]
#pip install --upgrade pip
Collecting pip
Downloading https://files.pythonhosted.org/packages/5f/25/e52d3f31441505a5f3af41213346e5b6c221c9e086a166f3703d2ddaf940/pip-18.0-py2.py3-none-any.whl (1.3MB)
100% |████████████████████████████████| 1.3MB 675kB/s
Installing collected packages: pip
Found existing installation: pip 8.1.2
Uninstalling pip-8.1.2:
Successfully uninstalled pip-8.1.2
Successfully installed pip-18.0 #pip install -r requirements.txt
Requirement already satisfied: PyMySQL==0.7.11 in /usr/lib/python2.7/site-packages (from -r requirements.txt (line 1)) (0.7.11)
Requirement already satisfied: wheel==0.29.0 in /usr/lib/python2.7/site-packages (from -r requirements.txt (line 2)) (0.29.0)
Requirement already satisfied: mysql-replication==0.13 in /usr/lib/python2.7/site-packages (from -r requirements.txt (line 3)) (0.13)
[root@db210_17:16:44 /opt/binlog2sql]
  • 授权mysql 执行账号:
root@localhost [wenyz]>grant SELECT, REPLICATION SLAVE, REPLICATION CLIENT on *.* to wyz@'%';
Query OK, 0 rows affected (0.00 sec) root@localhost [wenyz]>show grants for wyz@'%';
+-------------------------------------------------------------------------+
| Grants for wyz@% |
+-------------------------------------------------------------------------+
| GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'wyz'@'%' |
+-------------------------------------------------------------------------+
1 row in set (0.00 sec)
  • 模拟删除数据.
root@localhost [wenyz]>select count(*) from t2;
+----------+
| count(*) |
+----------+
| 163798 |
+----------+
1 row in set (0.08 sec) root@localhost [wenyz]>delete from t2 limit 20;
Query OK, 20 rows affected (0.00 sec) root@localhost [wenyz]>flush logs;
Query OK, 0 rows affected (0.01 sec) root@localhost [wenyz]>show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000236 | 268440480 |
| mysql-bin.000237 | 268436866 |
| mysql-bin.000238 | 268438786 |
| mysql-bin.000239 | 268438976 |
| mysql-bin.000240 | 55243968 |
| mysql-bin.000241 | 1310 |
| mysql-bin.000242 | 444 |
| mysql-bin.000243 | 2986 | //删除记录在此文件中
| mysql-bin.000244 | 194 |
+------------------+-----------+
244 rows in set (0.00 sec)
  • 执行mysqlbinlog2sql
[root@db210_17:25:54 /opt/binlog2sql/binlog2sql]
#python binlog2sql.py -uwyz -h127.0.0.1 -P3506 -pzstzst -dwenyz --start-file='mysql-bin.000243' > delsql.sql
Traceback (most recent call last):
File "binlog2sql.py", line 6, in <module>
import pymysql
ModuleNotFoundError: No module named 'pymysql'
[root@db210_17:26:00 /opt/binlog2sql/binlog2sql]
#vi binlog2sql.py
#!/usr/bin/env python2 //把python 为python2
# -*- coding: utf-8 -*- 结果还报错,后来是因为我环境中python指向的是3.5
#python binlog2sql.py -uwyz -h127.0.0.1 -P3506 -pzstzst -dwenyz --start-file='mysql-bin.000243' > delsql.sql
Traceback (most recent call last):
File "binlog2sql.py", line 6, in <module>
import pymysql
ModuleNotFoundError: No module named 'pymysql' #python2 binlog2sql.py -uwyz -h127.0.0.1 -P3506 -pzstzst -dwenyz --start-file='mysql-bin.000243' > delsql.sql
[root@db210_17:26:56 /opt/binlog2sql/binlog2sql]
#ll
#cat delsql.sql limit 20
USE wenyz;
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'wyz'@'%';
DELETE FROM `wenyz`.`t2` WHERE `date`='2018-07-29' AND `id`=3866964 AND `ti`='ffddssoie' LIMIT 1; #start 2370 end 2908 time 2018-08-02 17:13:25
... ...
  • 通过以上操作可以确定我们删除数据操作的事件位置,并执行以下命令恢复数据.
[root@db210_21:17:12 /opt/binlog2sql/binlog2sql]
#python2 binlog2sql.py -uwyz -h127.0.0.1 -P3506 -pzstzst -dwenyz --start-file='mysql-bin.000243' -B --start-pos=2370 --end-pos=2908 |mysql -S /tmp/mysql3506.sock -p
Enter password:
[root@db210_21:17:45 /opt/binlog2sql/binlog2sql]
mysql --login-path=p3506	(wd: /tmp)
root@localhost [wenyz]>select count(*) from t2;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 32
Current database: wenyz +----------+
| count(*) |
+----------+
| 163798 |
+----------+
1 row in set (0.04 sec) root@localhost [wenyz]>

binlog2sql 回滚误操作的更多相关文章

  1. Git回滚merge操作

    执行完merge操作后,没有修改代码 1.命令 ⑴ git reflog 查看merge操作的上一个提交记录的版本号 ⑵ git reset –hard 版本号 这样可以回滚到merge之前的状态 2 ...

  2. SQL Server:在事务中回滚TRUNCATE操作

    我们一般都认为TRUNCATE是一种不可回滚的操作,它会删除表中的所有数据以及重置Identity列. 如果你在事务中进行TRUNCATE操作,就能回滚.反之,它就不会从日志文件文件恢复数据.它不会在 ...

  3. binlog2sql实现MySQL误操作的恢复

    对于MySQL数据库中的误操作删除数据的恢复问题,可以使用基于MySQL中binlog做到类似于闪回或者生成反向操作的SQL语句来实现,是MySQL中一个非常实用的功能.原理不难理解,基于MySQL的 ...

  4. MySQL binlog2sql实现MySQL误操作的恢复

    对于MySQL数据库中的误操作删除数据的恢复问题,可以使用基于MySQL中binlog做到类似于闪回或者生成反向操作的SQL语句来实现,是MySQL中一个非常实用的功能.原理不难理解,基于MySQL的 ...

  5. git push 错误,回滚 push操作

    作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 0.记一次使用git push后,覆盖了同事代码的糗事 前言: ​ 都在WebStorm中操作,Idea或者PyCharm同理 ​ 为了高度还原尴尬 ...

  6. MySQL【Update误操作】回滚(转)

    前言:      继上一篇MySQL[Delete误操作]回滚之后,现在介绍下Update回滚,操作数据库时候难免会因为“大意”而误操作,需要快速恢复的话通过备份来恢复是不太可能的,因为需要还原和bi ...

  7. mysql基于binlog回滚工具_flashback(python版本)

        update.delete的条件写错甚至没有写,导致数据操作错误,需要恢复被误操作的行记录.这种情形,其实时有发生,可以选择用备份文件+binlog来恢复到测试环境,然后再做数据修复,但是这样 ...

  8. git回滚

    Git回滚的常用手法 07net01.com 发布于 4小时前 评论 传统VCS的回滚操作 对于版本控制系统VCS来说,回滚这个操作应该是个很普通也是很重要的需求. 如果你是传统VCS,比如SVN或者 ...

  9. 原创|1分钟搞定 Nginx 版本的平滑升级与回滚

    Nginx无论是对于运维.开发.还是测试来说,都是日常工作需要掌握的一个知识点,之前也写过不少关于Nginx相关的文章: Nginx服务介绍与安装 Nginx服务配置文件介绍 Nginx配置虚拟主机 ...

随机推荐

  1. Codeforces Round#516 Div.1 翻车记

    A:开场懵逼.然后发现有人1min过,于是就sort了一下,于是就过了.正经证明的话,考虑回文串两端点一定是相同的,所以最多有Σcnti*(cnti+1)/2个,cnti为第i种字母出现次数.而sor ...

  2. 【hackerrank】Week of Code 26

    在jxzz上发现的一个做题网站,每周都有训练题,题目质量……前三题比较水,后面好神啊,而且类型差不多,这周似乎是计数专题…… Army Game 然后给出n*m,问需要多少个小红点能全部占领 解法:乘 ...

  3. [JXOI2017]颜色 线段树扫描线 + 单调栈

    ---题面--- 题解: 首先题目要求删除一些颜色,换个说法就是要求保留一些颜色,那么观察到,如果我们设ll[i]和rr[i]分别表示颜色i出现的最左边的那个点和最右边的那个点,那么题目就是在要求我们 ...

  4. BZOJ4573:[ZJOI2016]大森林——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=4573 https://www.luogu.org/problemnew/show/P3348#sub ...

  5. BZOJ3076 & 洛谷3081:[USACO2013 MAR]Hill Walk 山走——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=3076 https://www.luogu.org/problemnew/show/P3081#sub ...

  6. BZOJ3427 Poi2013 Bytecomputer 【dp】

    题目链接 BZOJ3427 题解 容易发现最终序列一定是\(\{-1,0,1\}\)组成的 因为如果有一个位置不是,那么这个位置一定大于\(1\),那么上一个位置一定为\(1\),所以该位置一定加到过 ...

  7. extjs gridpanel 操作行 得到选中行

    extjs gridpanel 操作行 得到选中行的列 在Extjs 3.2.0上适合 var model = grid.getSelectionModel(); model.selectAll(); ...

  8. 1、搭建Struts2开发环境

    一.Struts2简介: Struts2是在WebWork2的基础上发展而来的.和struts1一样, Struts2也属于MVC框架.不过有一点大家需要注意的是:尽管Struts2 和 struts ...

  9. HDU 4417 主席树写法

    Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  10. [codeforces/edu2]总结(F)

    链接:http://codeforces.com/contest/600 A题: 字符串处理. B题: sort+upper_bound C题: 统计一下每种字符的个数,然后贪心. (1) 如果没有奇 ...