1. 程式人生 > >(轉)一次血的教訓,阿里雲rds mysql 資料庫,本地化並日志恢復已刪除的兩天資料

(轉)一次血的教訓,阿里雲rds mysql 資料庫,本地化並日志恢復已刪除的兩天資料

原文連結

參考阿里雲幫助文件

案例背景,勿刪公司線上資料庫使用者表(阿里去rds mysql),情急之下,將其恢復至最近備份(兩天前,阿里雲自動備份策略),恢復完後的第二天發現,備份與刪庫期間有些資料是重要且有用的,於是領導強烈希望能恢復期間資料,以減少公司損失,個人也懷有慚愧之心,於是盡力恢復。

假設資料時間線:1月1日12:30:00(阿里雲自動備份最近時間)1月3日14:54:33(刪除資料表)大概10分鐘內恢復到,1月1日12:30:00資料,資料恢復後第二天(1月4日),希望恢復1月1日12:30:00至1月3日14:54:33時間的增量資料。

一、阿里雲備份資料恢復到本地 提交工單並得到回覆無法恢復(順便吐槽下阿里雲服務一日不如一日),於是想到雖一照常儲存下來的是日誌(binlog),而且有印象可以通過日誌恢復資料,於是查了相關文章,得知,欲通過日誌恢復有幾個條件,

第一是有開啟binlog日誌功能,

第二是有一個開啟日誌後的備份,很慶幸,這兩點阿里雲rds都具備。具體下載及本地資料恢復可參考

恢復資料遇到的問題: Percona-XtraBackup 工具的安裝 官網 其餘根據文件將 1月1日12:30:00(阿里雲自動備份最近時間)的資料庫備份恢復到本地。

二、通過日誌恢復增量資料

根據以上文件基本可以,將兩天的增量恢復,其中有幾點注意的說明下,第一,多個binlog檔案可通過萬用字元載入,比如:

mysqlbinlog mysql-bin.00068* --start-position=531167  --stop-datetime="16-05-16 18:05:03" | mysql -uroot -pyour_password -P3306 -hyour_host_ip

*號可將多個檔案匯入,當然也可以用[123]這種格式 第二,日誌恢復相當於將操作回放一遍,如果出現錯誤建議將本地庫刪除,重新恢復一份,避免回放兩次,得到不可預期結果。 最後,希望能幫到遇到類似問題的同志們。 最後的最後,千萬別心存僥倖,以為群裡那些成天喊刪庫的事離我們很遠,其實只是一行程式碼的距離,最終建議,“任何操作之前先備份,任何線上操作都不做!”。