• 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;
    
  • 相关阅读:
    2019-2020-1 20175214 《信息安全系统设计基础》第1周学习总结
    数据结构部分结构截图
    优化算法小结
    排序算法总结
    计算机网络复习总结(三)
    计算机网络复习总结(二)
    计算机网络复习总结(一)
    Spring mvc4 + ActiveMQ 整合
    JAVA中定时任务
    类上带泛型
  • 原文地址:https://www.cnblogs.com/hypj/p/14186050.html
Copyright © 2020-2023  润新知