加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

删库不跑路-详解MySQL数据恢复

发布时间:2019-08-21 04:25:39 所属栏目:MySql教程 来源:程淇铭
导读:日常工作中,总会有因手抖、写错条件、写错表名、错连生产库造成的误删库表和数据的事情发生,那么,如果连数据都恢复不了,还要什么 DBA。 1 前言 数据恢复的前提的做好备份,且开启 binlog, 格式为 row。如果没有备份文件,那么删掉库表后就真的删掉了,

  2.找出执行了 drop table 语句的前一句的 pos 位置

  1. [mysql@mysql-test ~]$ mysqlbinlog -vv /data/mysql_log/mysql_test/mysql-bin.000039 | grep -i -B 10 'drop table `b`';  
  2. ... 
  3.  # at 35134  
  4. #190819 11:40:25 server id 83  end_log_pos 35199 CRC32 0x02771167     Anonymous_GTID    last_committed=132    sequence_number=133    rbr_only=no  
  5. SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;  
  6. # at 35199  
  7. #190819 11:40:25 server id 83  end_log_pos 35317 CRC32 0x50a018aa     Query    thread_id=37155    exec_time=0    error_code=0  
  8. use `mytest`/*!*/;  
  9. SET TIMESTAMP=1566186025/*!*/;  
  10. DROP TABLE `b` /* generated by server */ 

  从结果中我们可以看到 drop 所在语句的前一句开始位置是 35134,所以我们同步到 35134 (这个可别选错了)

  3.延迟库同步到要跳过的 SQL 前一条

  1. change master to master_delay=0;  
  2. start slave until master_log_file='mysql-bin.000039',master_log_pos=35134; 

  查看状态看到已经同步到对应节点

  1. chengqm-3307>>show slave status G;  
  2. ...  
  3.                   Master_Port: 3306  
  4.                 Connect_Retry: 60  
  5.               Master_Log_File: mysql-bin.000039  
  6.           Read_Master_Log_Pos: 65792  
  7. ...  
  8.              Slave_IO_Running: Yes  
  9.             Slave_SQL_Running: No  
  10.           Exec_Master_Log_Pos: 35134  
  11. ...  
  12.                Until_Log_File: mysql-bin.000039  
  13.                 Until_Log_Pos: 35134 

  4.跳过一条 SQL 后开始同步

  1. set global sql_slave_skip_counter=1;  
  2. start slave; 

查看同步状态,删除表 b 的语句已经被跳过

  1. chengqm-3307>>show slave status G;  
  2. ...  
  3.              Slave_IO_Running: Yes  
  4.             Slave_SQL_Running: Yes  
  5. ...  
  6. 1 row in set (0.00 sec)  
  7. chengqm-3307>>show tables;  
  8. +------------------+  
  9. | Tables_in_mytest |  
  10. +------------------+  
  11. | a                |  
  12. | b                |  
  13. +------------------+  
  14. 2 rows in set (0.00 sec) 

4.2.2 开启 GTID

使用 GTID 跳过的步骤会简单很多,只要执行一条和要跳过的 SQL 的 GTID 相同的事务就可以跳过了

    1.停止同步

  2.找出执行了 drop table 语句的 GTID

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读