【MySQL】MySQL事务回滚脚本
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 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。