python实现数据库事务回滚_使用Python脚本实现MySQL误操作的快速回滚

本文介绍了如何使用Python脚本在MySQL中模拟Oracle的闪回功能,通过逆向操作binlog来恢复误删除或更新的数据。这种方法比传统的全备+增备恢复更快捷,但要求binlog格式为row,且表结构不变,仅适用于DML操作的回滚。
摘要由CSDN通过智能技术生成

1.简介

在Oracle数据库中,当一个误操作被提交后,我们可以通过Oracle提供的闪回功能将表闪回至误操作之前的状态。mysql中没有原生的flushback功能,DBA误操作时,传统的恢复方式是利用全备+二进制日志前滚进行恢复。

今天给大家介绍一种使用Python脚本在MySQL中实现类似Oracle中flushback table的闪回功能,相比于传统的全备+增备,本方法更为快速、简单。

2.闪回原理

原理:调用mysql_rollback.py(下载见本文最后)对rows格式的binlog进行逆向操作,delete反向生成insert、update生成反向的update、insert反向生成delete。

3.说明

0、需安装python及MySQLdb模块

1、binlog的格式必须为row

2、要恢复的表操作前后表结构没有发生变更,否则脚本无法解析

3、只生成DML(insert/update/delete)的rollback语句,DDL语句不可回滚

4、最终生成的SQL是逆序的,所以最新的DML会生成在输入文件的最前面,并且带上了时间戳和偏移点,方便查找目标

5、需要提供一个连接MySQL的只读用户,主要是为了获取表结构

6、如果binlog过大,建议带上时间范围,也可以指定只恢复某个库的SQL

7、SQL生成后,请务必在测试环境上测试恢复后再应用到线上

4.实战

step1.登陆mysql查看表信息

mysql> use db1

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> select * from test;

+------+-------+------+---------+----------+

| id  | name  | age  | country | city    |

+------+-------+------+---------+----------+

|    1 | alex  |  26 | china  | shanghai |

|    2 | bob  |  25 |

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值