16. mysqldump+binlog故障恢复案例模拟¶
1. 背景环境¶
#1. 背景环境: 正在运行的网站系统,mysql数据库,数据量25G,日业务量10-15M
#2. 备份方式: 每天23:00,计划任务调用mysqldump执行全备脚本
#3. 故障时间点:上午10:00,误删除一个表
2. 恢复思路¶
1.挂出维护页面
2.找测试库
3.恢复全备到测试库
4.追加二进制日志到误删除时间点,恢复到测试库
5.验证数据,将故障表导出,导入生产库
6.开启业务
3. 模拟故障¶
3.1 模拟昨天23:00全备¶
mysqldump -uroot -p -A -R --triggers --master-data=2 --single-transaction > all.sql
3.2 模拟23:00-10:00业务¶
create database baidu chaset utf8;
use baidu;
create table t1 (id int);
insert into t1 values(1),(2),(3),(4),(5),(6);
commit;
update t1 set id=10 where id =1;
commit;
select * from t1;
3.3 模拟10:00误删除表¶
use baidu;
drop table t1;
4. 准备恢复数据¶
4.1 查找二进制日志起点终点¶
#查看全备文件第22行:找到二进制日志恢复起点
vim /backup/full.sql
#查看误删除时的位置信息,找到二进制日志恢复终点
mysql -root -p
show binlog events in 'mysql-bin.000001';
4.2 截取二进制日志¶
mysqlbinlog --start-position=425 --stop-position=1231 /data/mysql/mysql-bin.000001 >/backup/binlog.sql
5. 恢复数据到测试库¶
mysql -uroot -p
set sql_log_bin=0;
source /backup/full.sql
source /backup/binlog.sql
set sql_log_bin=1;
6. 验证数据¶
mysql -uroot -p
select * from baidu.t1;
7. 将t1表从测试库导出¶
mysqldump -uroot -p -R --triggers --master-data=2 --single-transaction baidu t1 >/backup/t1.sql
8. 在生产库中导入表¶
mysql -uroot -p
set sql_log_bin=0;
source /backup/t1.sql
set sql_log_bin=1;
9. 验证数据¶
mysql -uroot -p
select * from baidu.t1;
最后更新:
2022-02-20 08:44:07