MySQL5.7下麵,誤操作導致的drop table db1.tb1; 的恢復方法: 0、停業務數據寫入。【iptables封禁】 1、從備份伺服器上拉取最新的一個全備文件,恢復到一個臨時的伺服器上,解壓並啟動mysqld。 2、在這台新的slave上執行如下命令: 2.1 先配置好複製關係, c ...
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倒入表空間來完成數據的倒入】