MySQL自己的 mysqlbinlog | mysql 回滚不好用,自己写个简单脚本试试:
想法是用mysqlbinlog把需要回滚的事务区域从mysql-bin.file中找到,然后通过脚本再插入DB。
## INSERT 需要将新增数据删除 对应DELETE
## DELETE 需要将删除数据恢复 对应INSERT
## UPDATE
需要将修改数据恢复 对应UPDATE
## 手动读取BINLOG,并找到对应位置和对应事务
## 手动删除除事务外的其他说明语句
INSERT回滚最简单,其次是DELETE的,UPDATE操作比较麻烦。
fun_DELETE() { ##### GET ONE TRANSACTION ROWS ##### local rows=`awk "BEGIN{print $columns + 2}"` ##### GET COUNtS OF TRANSACTION ##### n=`cat $bak_file | grep DELETE | wc -l` ##### GET TABLE NAME ##### table=`sed -n "1p" $binlog | awk "{print $3}"` for ((i=1;i<=n;i++)) do ##### MAKE SQL ##### data=`sed -n ‘3,‘{$rows}’p‘ $binlog | awk ‘{print $1}‘| awk -F ‘=‘ ‘{print $2}‘ | tr -t ‘\n‘ ‘,‘ | sed ‘s/,$//‘ | sed ‘s/^/(/‘ | sed ‘s/$/)/‘` echo $data >> /export/jiangxu/sh/tmp.txt ##### CLEAN bak_file FOR TRANSACTION HAVE DONE ##### done echo done! tr -t ‘\n‘ ‘,‘ /export/jiangxu/sh/tmp.txt }
【MySQL】MySQL事务回滚脚本,布布扣,bubuko.com
原文:http://www.cnblogs.com/jiangxu67/p/3732188.html