MySQL5.7下面,誤操作導致的drop table db1.tb1; 的恢復方法:

艾艾貼發表於2018-07-14

MySQL5.7下面,誤操作導致的drop table db1.tb1; 的恢復方法:

 

0、停業務資料寫入。【iptables封禁】

 

1、從備份伺服器上拉取最新的一個全備檔案,恢復到一個臨時的伺服器上,解壓並啟動mysqld。

2、在這臺新的slave上執行如下命令:

2.1 先配置好複製關係, change master to 到當前誤操作的伺服器,但是不要啟動複製程式。【類似如下命令】

1
2
3
4
5
6
>CHANGE MASTER TO 
MASTER_HOST=`172.16.20.73`,
MASTER_USER=`rpl`,
MASTER_PASSWORD=`rpl`,
master_log_file=`master-bin.000005`,
master_log_pos=245;

 

2.2 在新的slave上執行復制過濾操作:

1
> CHANGE REPLICATION FILTER REPLICATE_WILD_DO_TABLE = (`db1.tb1`);

2.3 開啟slave 複製,到出問題的地方之前停下來

1
2
> start slave io_thread ;
> start slave sql_thread until master_LOG_FILE=`mysql-bin.000010`,master_LOG_POS=10020;   -- 執行到最後一次沒問題的位移點

 

2.4 在slave上跳過這個誤操作的事務

1
2
3
4
5
6
set GTID_NEXT=`56bc2f04-7556-11e8-b3b6-000c29ba98ce:1492` ;  -- 這裡的這個就是應該跳過的那個事務(可以從主庫的binlog裡面找到這個gtid編號)
begin ;
commit ;
set GTID_NEXT="AUTOMATIC";
> start slave ;
> show slave status G 檢視複製情況

 

2.5 將這個從庫的db1.tb1 通過mysqldump方式匯出,然後倒入到線上誤操作的例項裡面。 【大表的話,可以用xtrabackup備份單表,然後import倒入表空間來完成資料的倒入】

 

相關文章