my10_使用binlog2sql闪回DML操作

Posted 每周向前一小步

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了my10_使用binlog2sql闪回DML操作相关的知识,希望对你有一定的参考价值。

下载
git clone https://github.com/danfengcao/binlog2sql.git

原理
使用python连接到指定的库,读取要恢复表的表结构和对应的binlog日志,在binlog 为row格式并且DML记录所有字段值的情况下,将set 与where后字段值对换位置,拼接成的SQL就是回滚SQL。

安装
unzip binlog2sql-master.zip
cd binlog2sql-master/
pip install -r requirements.txt

误操作
mysql -uautomng -p‘Automng_123‘ -P3319
update sbtest7 set pad=‘wa ka ka ‘ where id=3;
update sbtest8 set pad=‘wa ka ka ‘ where id=3;

mysql> show master statusG;
*************************** 1. row ***************************
File: mysql-bin.000035

# python binlog2sql.py -h127.0.0.1 -P3319 -uautomng -pAutomng_123 -dtxdb -t sbtest7 sbtest8 --start-file=mysql-bin.000035 --start-datetime=2018-08-01 15:50:00 --stop-datetime=2018-08-01 16:01:00
UPDATE `txdb`.`sbtest7` SET `c`=39314051591-30329702885-35198042800-16393519874-56867884250-41805987558-63125675500-93376317385-90603675036-63992232134, `k`=149507, `pad`=wa ka ka, `id`=3 WHERE `c`=39314051591-30329702885-35198042800-16393519874-56867884250-41805987558-63125675500-93376317385-90603675036-63992232134 AND `k`=149507 AND `pad`=90728107484-01984250703-04244069858-02683578329-82506775849 AND `id`=3 LIMIT 1; #start 4 end 758 time 2018-08-01 16:00:12
UPDATE `txdb`.`sbtest8` SET `c`=22165230283-89382372870-64352117725-29359509089-24558560067-39564369546-34463527363-05997343623-26127428609-19766153460, `k`=202756, `pad`=wa ka ka, `id`=3 WHERE `c`=22165230283-89382372870-64352117725-29359509089-24558560067-39564369546-34463527363-05997343623-26127428609-19766153460 AND `k`=202756 AND `pad`=54879921302-82844293345-80647833951-55849410697-97809519145 AND `id`=3 LIMIT 1; #start 785 end 1393 time 2018-08-01 16:00:21

#start 4 end 758 time 2018-08-01 16:00:12
#start 785 end 1393 time 2018-08-01 16:00:21
# python binlog2sql.py --flashback -h127.0.0.1 -P3319 -uautomng -pAutomng_123 -dtxdb -t sbtest7 sbtest8 --start-file=mysql-bin.000035 --start-position=4 --stop-position=1393
UPDATE `txdb`.`sbtest8` SET `c`=22165230283-89382372870-64352117725-29359509089-24558560067-39564369546-34463527363-05997343623-26127428609-19766153460, `k`=202756, `pad`=54879921302-82844293345-80647833951-55849410697-97809519145, `id`=3 WHERE `c`=22165230283-89382372870-64352117725-29359509089-24558560067-39564369546-34463527363-05997343623-26127428609-19766153460 AND `k`=202756 AND `pad`=wa ka ka AND `id`=3 LIMIT 1; #start 785 end 1393 time 2018-08-01 16:00:21
UPDATE `txdb`.`sbtest7` SET `c`=39314051591-30329702885-35198042800-16393519874-56867884250-41805987558-63125675500-93376317385-90603675036-63992232134, `k`=149507, `pad`=90728107484-01984250703-04244069858-02683578329-82506775849, `id`=3 WHERE `c`=39314051591-30329702885-35198042800-16393519874-56867884250-41805987558-63125675500-93376317385-90603675036-63992232134 AND `k`=149507 AND `pad`=wa ka ka AND `id`=3 LIMIT 1; #start 4 end 758 time 2018-08-01 16:00:12

 

回滚
python binlog2sql.py --flashback -h127.0.0.1 -P3319 -uautomng -p‘Automng_123‘ -dtxdb -t sbtest7 sbtest8 --start-file=‘mysql-bin.000035‘ --start-position=4 --stop-position=1393 > /tmp/rollback.sql | cat
事务号一定要看清楚并写对了,如果……如果不小心写错了一位数,你可以想象一下后果……
mysql -uautomng -p‘Automng_123‘ -P3319 txdb < /tmp/rollback.sql

在尝试通过远程的方式操作时,失败了,不知是不支持远程还是哪里遇到了问题,正在排查中……如果不能通过远程的方式操作,那么就需要提前在服务器上安装这个脚本。

以上是关于my10_使用binlog2sql闪回DML操作的主要内容,如果未能解决你的问题,请参考以下文章

mysql闪回工具binlog2sql 安装使用

binlog2sql与MariaDB flashback

除了binlog2sql工具外,使用python脚本闪回数据(数据库误操作)

Mysql数据闪回的奇技淫巧(binlog2sql)

Mysql闪回工具之binlog2sql的原理及其使用

binlog2sql闪回工具的使用