zoukankan      html  css  js  c++  java
  • 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;
    
  • 相关阅读:
    初步使用redis
    redis配置文件介绍
    windows64位 redis安装 步骤
    敏感词过滤算法
    SpringBoot使用拦截器无效
    linux常用命令
    automation(一)
    JAVA的接口多态
    JAVA的多态(强制转换)
    JAVA的多态
  • 原文地址:https://www.cnblogs.com/hypj/p/14186050.html
Copyright © 2011-2022 走看看