4.2.5 案例:通过mysqldump全备+binlog实现PIT数据恢复

环境背景: 小型的业务数据库,50G,每天23:00全备,定期binlog异地备份。
故障场景: 周三下午2点,开发Navicat连接数据库实例错误,导致生产数据被误删除(DROP)
  • 恢复思路:
   	 1.  挂维护页。
   	 2.  检查备份、日志可用。
   	 3.  如果只是部分损坏,建议找一个应急库进行恢复
   		 a. 全备恢复 
   		 b. 日志截取并恢复 
   	 4.  恢复后数据校验	(业务测试部门验证)
   	 5.  立即备份(停机冷备) 
   	 6.  恢复架构系统
   	 7.  撤维护页,恢复业务 
  • 模拟故障:

	     1. 模拟测试数据
	     mysql> create database pit;
	     mysql> use pit 
	     mysql> create table t1 (id int);
	     mysql> insert into t1 values(1),(2),(3);
	     mysql> commit;
	     2. 全备 
	        [root@db01 tmp]# mysqldump -uroot -p -A --master-data=2 --single-transaction -R -E --triggers --max_allowed_packet=64M >/tmp/full_2300.sql 
	     3. 模拟周三白天的操作 
	        mysql> use pit
	        mysql> insert into t1 values(11),(22),(33);
	        mysql> commit;
	     4. 模拟周三下午2:00,删库操作
	        mysql> drop database pit;
  • 恢复过程
	
	     1. 恢复全备 
	     source /tmp/full_2300.sql 
	     2. 截取二进制日志
	        起点:  21105555
	        [root@db01 tmp]# grep "\-- CHANGE MASTER TO" /tmp/full_2300.sql 
	        -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000009', MASTER_LOG_POS=21105555;
	
	
	终点:21105836
	
	a. show master status ;
	b.  mysql> pager grep -i "drop database pit" -B 10                       
	
	| mysql-bin.000009 | 21105805 | Xid        51 |    21105836 | COMMIT /* xid=6232 */                                                                                                
	| mysql-bin.000009 | 21105836 | Gtid       51 |    21105913 | SET @@SESSION.GTID_NEXT= '95972e36-43fe-11eb-a366-000c2905f029:70'                                                 
	| mysql-bin.000009 | 21105913 | Query      51 |    21106014 | drop database pit /* xid=6234 */                                                                                                                                            
	
	[root@db01 tmp]# mysqlbinlog --skip-gtids --start-position=21105555 --stop-position=21105836 /data/3306/binlog/mysql-bin.000009 >/tmp/bin.sql

        3. 恢复日志
        mysql> set sql_log_bin=0;
        mysql> source /tmp/bin.sql
        mysql> set sql_log_bin=1;
posted @ 2020-12-24 20:02  HSping  阅读(171)  评论(0编辑  收藏  举报