首页 > 代码库 > 【MySQL】MySQL事务回滚脚本

【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
}