阿里RDS免费版是支持回滚(mysql利用binlog2sql批量回滚数据(快速闪回))

mysql原生自带mysqlbinlog,但使用binlog恢复的原理是“重做”而不是“回滚”。网上相当多的文章描述mysqlbinlog用法的时候,并没有进行完整说明(先使用完整备份恢复数据库至最近备份时间点,再利用binlog恢复上次备份到现在的剩余数据)。
如果线上环境着急“回滚”,哪有时间去暂停业务,恢复备份,并学习binlog,结果很可能就是乱上加乱。因此,借助处理一起误删除的事故,整理记录快速回滚操作,以备以后不时之需。
首先,阿里RDS免费版是支持回滚的,此功能在"数据追踪"里.选择时间/库/表等内容,即可追踪到误操作的数据,并直接给出回滚sql语句,copy出来执行即可.
此方法其实可以解决大部门问题.只是有点限制,比如之前有时间限制,我记得大概是1个小时(限制比较大).目前是容量限制,可以追踪2G的数据(基本够用了).
另外,如果是使用工具进行的delete删除了1万条数据,很有可能会产生1万条delete语句和1万条回滚语句.这样操作起来会累死人.
所有感谢binlog2sql项目的存在.如果有时间请尽量阅读原项目说明.

恢复前提

mysql server服务器在线
开启了binlog日志(如果使用的阿里RDS,肯定是开启的)

恢复前提

binlog2sql 是基于python 的第三方项目,

项目地址:https://github.com/danfengcao/binlog2sql

安装方法:

shell> git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql
shell> pip install -r requirements.txt

推荐使用国内豆瓣加速下载

shell> pip install -r requirements.txt -i  http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

因此需要python环境,和pip工具。

快速python环境(如果有就可以跳过了)

本着不求最好,只求最快的原则,推荐使用anaconda
到国内镜像下载适合自己操作系统的安装包。

https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/

比如我使用的

shell>wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.3.1-Linux-x86_64.sh

然后给予执行权限,并执行.

shell>chmod +x Anaconda3-5.3.1-Linux-x86_64.sh
shell>./Anaconda3-5.3.1-Linux-x86_64.sh 

重新到binlog2sql目录下,安装binlog2sql的requirements
如果没有export python的环境变量,你也许需要写出pip的完整路径,比如:

~/anaconda3/bin/pip install -r requirements.txt 
  • 找到记录数据的binlog文件(必须)

阿里RDS最简单的办法,RDS>>>某实例>>>备份恢复>>>日志备份,
列表里根据时间,列出了数据在哪个文件.如果最新的操作时间不在此列表里,那就是还没有备份,存在于RDS的本地实例中,进入实例新建查询,

show master logs;

这里有,而列表里没有的,就是最新的binlog,需要的数据在于此,记录下这个log_name.

获得原始sql语句(非必须)

此步先大范围粗略的查找原始sql语句,再从中锁定导致错误的 关键的那一条 sql语句.

~/anaconda3/bin/python binlog2sql/binlog2sql.py -h rm-xxxxxxxxx.mysql.rds.aliyuncs.com -uroot -p -d dbname -t tablename --start-datetime='2019-09-16 11:44:00' --stop-datetime='2019-09-16 11:50:00'  --start-file='mysql-bin.00003'>binlog000003.sql

通过grep或者文件编辑器,找到具体的sql语句.接着就可以通过–flashback(-B)参数生成闪回回滚sql了.

~/anaconda3/bin/python binlog2sql/binlog2sql.py --flashback -h rm-xxxxxxxxx.mysql.rds.aliyuncs.com -uroot -p -d dbname -t tablename --start-file='mysql-bin.001003'>binlog001003-backup.sql

--start-position=1000 --stop-position=2000
--start-datetime='2019-09-16 11:44:00' --stop-datetime='2019-09-16 11:50:00' 

通过加入点或者时间参数,来精确范围,用法跟mysqlbinlog命令是一样的.导出sql之后,也可以编辑sql语句来筛选.
把回滚语句发给业务部门,确认后执行.
比如

shell> mysql -h127.0.0.1 -P3306 -uroot -p'admin' < /tmp/rollback.sql
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值