使用条件
mysql为 行模式 rows
查找删除点
通过大致时间,获取误操作的position位置点和时间点
# 开始时间 mysqlbinlog --base64-output=decode-rows -vvv --start-datetime='2021-07-15 16:30:00' --stop-datetime='2021-07-15 19:00:00' /mydata/3306/binlog/mysql-bin.000003 |grep -i -A 50 -B 50 '表名 |grep -i -A 50 -B 50 'delete'|head -n 100 # 结束时间 //这里的stop时间最好给的大一点别漏了 mysqlbinlog --base64-output=decode-rows -vvv --start-datetime='2021-07-15 16:30:00' --stop-datetime='2021-07-15 19:00:00' /mydata/3306/binlog/mysql-bin.000003 |grep -i -A 50 -B 50 '表名 |grep -i -A 50 -B 50 'delete'|tial -100
参数
# 知道详细位置使用 --stop-position= --start-position= # 知道大体位置使用 需要修改脚本里的参数 --start-datetime --stop-datetime
脚本
使用精确的时间点进行操作即可
#!/bin/bash # 开始时间 starttime='2022-02-21 14:49:48' # 结束时间 endtime='2022-02-21 16:25:31' # binlog日志路径 logname='/mydata/3306/binlog/mysql-bin.000008' # 数据库名 db=test # 回滚表名 table=t3 # 回滚文件输出路径 tmpfile='/tmp/mysql_roll_t3' # mysql连接用户 User='dba' # mysql 连接密码 pwd="123456" # mysql 主机地址 Host='127.0.0.1' mysqlbinlog --base64-output=decode-rows -vvv --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;' > ${tmpfile} n=0; for i in `mysql -uroot -ptkamc.00 --skip-column-names --silent -e "desc ${db}.${table}" |awk '$0=$1'`; do ((n++)); done sed -i -r "s/(@$n.*),/\1;/g" ${tmpfile} sed -i 's/@[1-9].*=//g' ${tmpfile} sed -i 's/@[1-9][0-9]=//g' ${tmpfile}
分享是一种精神
好用点个赞谢谢