MySQL自己的 mysqlbinlog | mysql 回滚不好用,自己写个简单脚本试试:
想法是用mysqlbinlog把需要回滚的事务区域从mysql-bin.file中找到,然后通过脚本再插入DB。
## INSERT 需要将新增数据删除 对应DELETE
## DELETE 需要将删除数据恢复 对应INSERT
## UPDATE 需要将修改数据恢复 对应UPDATE
## 手动读取BINLOG,并找到对应位置和对应事务
## 手动删除除事务外的其他说明语句
INSERT回滚最简单,其次是DELETE的,UPDATE操作比较麻烦。
#!/bin/bash ## INSERT 需要将新增数据删除 对应DELETE ## DELETE 需要将删除数据恢复 对应INSERT ## UPDATE 需要将修改数据恢复 对应UPDATE ## 手动读取BINLOG,并找到对应位置和对应事务 ## 手动删除除事务外的其他说明语句 path=`pwd` tmp_file=$path/tmp.file cache_file=$path/cache.file binlog_file=$path/$3 sql_file=$path/rollback.sql columns='$2' display_err() { echo -e "\033[45;36m$1\033[0m" } display_ok() { echo -e "\033[40;32m$1\033[0m" } fun_INSERT() { echo -e "\033[40;32m$1\033[0m" } fun_DELETE() { ##### GET ONE TRANSACTION ROWS ##### local row_count=`awk 'BEGIN{print 12 + 2}'` ##### GET COUNtS OF TRANSACTION ##### n=`cat $binlog_file | grep DELETE | wc -l` ##### GET TABLE NAME ##### table=`sed -n '1p' $binlog_file | awk '{print $3}'` for ((i=1;i<=n;i++)) do ##### MAKE SQL ##### sed -n '3,'$row_count'p' $binlog_file | awk '{print $1}'| awk -F '=' '{print $2}' | tr -t '\n' ',' | sed 's/,$//' | sed 's/^/(/' | sed 's/$/)/' >> $tmp_file ##### GET POS FOR CUT ##### local pos=`awk 'BEGIN{print '$row_count' + 1 }'` ##### CLEAN cache_file FOR TRANSACTION HAVE DONE ##### sed -n ''$pos',$w '$cache_file'' $binlog_file ##### COPY TO binlog_file ##### /bin/cp -f $cache_file $binlog_file ##### CHECK THE NUMBLE OF TRANSACTION ##### done ##### \n to , ##### sed 's/)(/),(/g' $tmp_file | sed 's/^/insert into t1 values /' | sed 's/)$/);/' > $sql_file rm -rf $tmp_file echo done! ##### CHECK THE NUMBLE OF TRANSACTION TO MAKE SQL ##### } case $1 in insert ) fun_INSERT ;; delete ) fun_DELETE ;; update ) fun_update ;; * ) display_err "ERROR!!!! Only insert or delete or update could be input!" ;; esac
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?