MySQL误删库之还原实战
1 场景介绍
某个时间点用户用drop database误删除了业务数据库数据(比如fi库),由于没有做物理备份,已知的备份策略为每天凌晨1点的逻辑全备+binlog日志。现需要回滚数据库到误删除之前的状态,并前滚至当前最新时间点。
2 还原恢复方案选择
根据已知备份策略,此处选择 全库还原+使用binlog增量还原方案,进行数据库恢复。
3 确定恢复所需的备份集及binlog日志文件
a. 根据每天定时任务的备份脚本,已知全量备份集在/备份路径/"`date '+%Y%m%d%H%M%S'`"目录下
b. 进入上述目录,查看最近备份集中metadata文件信息
# strings metadata
Started dump at: 2023-05-11 01:00:01
SHOW MASTER STATUS:
Log: mysql_bin_30001.001491
Pos: 185349301
GTID:8afb9d79-120c-11ed-9c65-005056a06c35:1-84026942
由上可知,我们应用binlog日志应该从mysql_bin_30001.001491日志文件的185349301位置开始,一直到最新的binlog文件(本例为mysql_bin_30001.001493)。
4 恢复数据库
a. 对当前数据库进行全备,全备脚本参考
# cat dbbackup.sh
DT="`date '+%Y%m%d%H%M%S'`"
echo "$DT : ##### begin backup"
mkdir -p /你的备份路径/$DT
/bin/mydumper -h 127.0.0.1 -u cosmic -p **** -P 3306 -G -R -E -c -t 8 -r 10000 -o /你的备份路径/$DT
[ $? -eq 0 ] && echo "$DT : backup done" || echo "$DT : backup failed"
重命名备份文件
mv /你的备份路径/`date '+%Y%m%d%H%M%S'` /你的备份路径/bak"`date '+%Y%m%d%H%M%S'`"
b. 停止应用
c. 清理业务库
# mysql -ucosmic -p****
mysql> show databases;
mysql> drop database uat_fi;
d. 全库还原
使用最近的全量备份进行恢复
# myloader -ucosmic -p**** -o -d /你的备份路径/bak_20230511010001
e. 增量还原
# mysqlbinlog --start-position=185349301 --skip-gtids=true mysql_bin_30001.001491 > mysql_bin_30001.001491.sql
# mysqlbinlog --start-position=1 ---skip-gtids=true mysql_bin_30001.001492 > mysql_bin_30001.001492.sql
# mysqlbinlog --start-position=1 --skip-gtids=true mysql_bin_30001.001493 > mysql_bin_30001.001493.sql
注释掉删库的命令
sed -i 's/drop database/#drop database/g' mysql_bin*.sql
依次导入sql文件
# mysql -ucosmic -p**** -h127.0.0.1 < mysql_bin_30001.001491.sql01
# mysql -ucosmic -p**** -h127.0.0.1 < mysql_bin_30001.001492.sql01
# mysql -ucosmic -p**** -h127.0.0.1 < mysql_bin_30001.001493.sql01
f. 启动应用,并检查业务数据及功能是否正常。
5 还原注意事项
说明:--skip-gtids=true 参数
是否使用--skip-gtids=true参数,要根据情况来定;
第一种情况:
如果我们是要恢复数据到源数据库或者和源数据库有相同 GTID 信息的实例,那么就要使用该参数。如果不带该参数的话,是无法恢复成功的。因为包含的 GTID 已经在源数据库执行过了,根据 GTID 特性,一个 GTID 信息在一个数据库只能执行一次,所以不会恢复成功。
第二种情况:
如果是恢复到其他实例的数据库并且不包含源实例的 GTID 信息,那么可以不使用该参数,使用或者不使用都可以恢复成功。
本次是要恢复到源数据库,故应该加上--skip-gtids=true参数。
MySQL误删库之还原实战
本文2024-09-23 01:13:13发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-144545.html