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事务回滚脚本