【MySQL】利用binlog回滚DML操作
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,简介:数据库运行过程中难免会发生误操作,特别是在测试环境 开发人员或测试人员有时会误删或者更新错误某些数据。这时可以用binlog闪回DML操作。条件:1.mysql binlog必须存在且是row格
千家信息网最后更新 2026年11月03日【MySQL】利用binlog回滚DML操作
简介:
数据库运行过程中难免会发生误操作,特别是在测试环境 开发人员或测试人员有时会误删或者更新错误某些数据。这时可以用binlog闪回DML操作。
条件:
- 1.mysql binlog必须存在且是row格式的
- 2.反向生成的表必须有主键
- 3.表结构不能有更改
1.shell脚本闪回:
# 脚本 del_time_recovery.sh(根据起止 time恢复)用于回滚delete操作:#!/bin/bash# File Name : del_time_recovery.sh# Author : wang# Description : delete recover according to starttime and endtime.Usage() {cat << EOFmysql_delete_recoveryOPTIONS: -b binlog name -s starttime -e endtime -d database name -t table nameFor secrity: This scripts check the full need argumentsEOF}while getopts ":b:s:e:d:t:" opt; do case $opt in b) logname=${OPTARG} ;; s) starttime=${OPTARG} ;; e) endtime=${OPTARG} ;; d) db=${OPTARG} ;; t) table=${OPTARG} ;; \?) echo "Invalid option: -$OPTARG" >&2 exit 1 ;; :) echo "Option -$OPTARG requires an argument." >&2 Usage exit 1 ;; esacdoneif [ $# != 10 ] ; then Usage exit 1;fiPATH=$[PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin:/usr/local/mysql/bin](http://path/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin:/usr/local/mysql/bin)export PATHuser=rootpwd='xxxxxxxx'tmpfile=/tmp/del_recovery_$table.sqlmysqlbinlog --no-defaults -vv --base64-output=DECODE-ROWS --start-datetime="$starttime" --stop-datetime="$endtime" $logname |sed -n '/### DELETE FROM `'${db}'`.`'${table}'`/,/COMMIT/p' | \sed -n '/###/p' | \sed 's/### //g;s/\/\*.*/,/g;s/DELETE FROM/INSERT INTO/g;s/WHERE/SELECT/g;' > $tmpfilen=0;for i in `mysql -u$user -p$pwd --skip-column-names --silent -e "desc $db.$table" |awk '$0=$1'`;do ((n++));donesed -i -r "s/(@$n.*),/\1;/g" $tmpfilesed -i 's/@[1-9].*=//g' $tmpfilesed -i 's/@[1-9][0-9]=//g' $tmpfile# 用法:-b -s -e -d -t 分别带别binlog名字 开始的time 结束的time 库名 表名,# 直接使用 sh del_time_recovery.sh -b /mysqllog/mysql-bin.000005 -s "2017-11-02 19:10:00" -e "2017-11-02 19:20:00" -d test_db -t test_tb 即可调用# 脚本 update_time_recovery.sh(根据起止 time恢复)用于回滚update操作:#!/bin/bash# File Name : update_time_recovery.sh# Author : wang# Description : update recover according to starttime and endtime.Usage() {cat << EOFmysql_update_recoveryOPTIONS: -b binlog name -s starttime -e endtime -d database name -t table nameFor secrity: This scripts check the full need argumentsEOF}while getopts ":b:s:e:d:t:" opt; do case $opt in b) logname=${OPTARG} ;; s) starttime=${OPTARG} ;; e) endtime=${OPTARG} ;; d) db=${OPTARG} ;; t) table=${OPTARG} ;; \?) echo "Invalid option: -$OPTARG" >&2 exit 1 ;; :) echo "Option -$OPTARG requires an argument." >&2 Usage exit 1 ;; esacdoneif [ $# != 10 ] ; then Usage exit 1;fiuser=rootpwd='xxxxxxx'tmpfile=/tmp/update_recovery_$table.sqln=0;for i in `mysql -u$user -p$pwd --skip-column-names --silent -e "desc $db.$table" |awk '$0=$1'`;do ((n++));donemysqlbinlog --no-defaults -vv --base64-output=DECODE-ROWS --start-datetime="$starttime" --stop-datetime="$endtime" $logname |sed -n '/### UPDATE `'${db}'`.`'${table}'`/,/COMMIT/p' \| sed '/WHERE/{:a;N;/SET/!ba;s/\([^\n]*\)\n\(.*\)\n\(.*\)/\3\n\2\n\1/}' \| sed -r '/WHERE/{:a;N;/@'"$n"'/!ba;s/### @2.*//g}' \| sed 's/### //g;s/\/\*.*/,/g' \| sed '/WHERE/{:a;N;/@1/!ba;s/,/;/g};s/#.*//g;s/COMMIT,//g' \| sed '/^$/d' > $tmpfilen=0;for i in `mysql -u$user -p$pwd --skip-column-names --silent -e "desc $db.$table" |awk '$0=$1'`;do ((n++)); sed -i "s/@$n\b/$i/g" $tmpfiledonesed -i -r "s/($i=.*),/\1/g" $tmpfile# 用法:-b -s -e -d -t 分别带别binlog名字 开始的time 结束的time 库名 表名,# 直接使用 sh update_time_recovery.sh -b /mysqllog/mysql-bin.000005 -s "2017-11-03 14:30:00" -e "2017-11-03 15:00:00" -d test_db -t test_tb 即可调用2.利用mysqlbinlog_back.py 脚本:
参考:
【MySQL】mysqlbinlog_flashback工具使用
3.利用MyFlash工具:
参考:
【MySQL】MyFlash 回滚mysql binlog
网上还有很多类似的开源项目 如:binlog2sql等 都可以参考下。
脚本
参考
人员
名字
工具
数据
测试
起止
数据库
是在
条件
格式
环境
简介
结构
过程
错误
项目
开发
更新
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
耶加雪菲
互联网佳科技有限公司
科技与互联网
今日互联网科技
智能科技公司是互联网公司吗
互联网扶贫科技
科技制造互联网公司
互联网科技公司电话
世界互联网领先科技成果
万达互联网科技
广州优美互联网科技
承德科技产业互联网发展
华服互联网科技官网
中国航天科技大学国际工业互联网
互联网科技与大数据专业
呼和浩特新华互联网科技学院
高科技互联网发展前景如何
济南有互联网科技公司吗
深圳无忧互联网科技
江苏互联网智能科技产品出厂价
上海卓越科技互联网
西安纸贵互联网科技有限公司
高科技互联网
互联网 科技公司
美国互联网科技
互联网科技作文
深圳市罗太互联网科技有限公司
互联网科技的全部知识
浙南科技城互联网大厦招聘
厦门江牛科技互联网