手動恢復RDS MySQL數據庫

有時難免需要恢復數據庫到之前某個制定時間點(例如由於SQL誤操作並且已經commit導致)。在阿里雲控制檯,RDS有兩種恢復方法,一種是覆蓋性恢復,可以爲理解通過全量備份覆蓋當前數據庫,只能選取某個全量備份進行操作;一種是通過創建臨時庫,可以指定近7天內任意時間點。顯然,選擇後者相對能將影響降到最低。但是假如由於不靠譜的操作或者其他原因選擇了前者,一旦覆蓋恢復完成,則不能再創建覆蓋性恢復之前時間點的臨時庫了。本文僅討論操作了覆蓋性恢復,如何儘量再找回一個最接近誤操作時間點的數據庫。

參考這個文檔,首先要把最近的正常的全量備份下載下來,然後是在備份時間點之後的所有binlog增量。最後的一個binlog增量,其中會混合了正常的操作和誤操作。

按照文檔,先通過rds_backup_extract解壓全量備份文件。再通過innobackupex恢復數據文件。然後修改backup-my.cnf,這個文檔已經偏舊,實際上你應該只保留如下圖的中間那幾行就可以。

images70

然後再根據RDS控制檯顯示的數據庫版本,去下載一個版本號大於等於該版本的MySQL。可以從國內開源鏡像下載,不然會比較尷尬。由於是臨時使用,隨便指向一個目錄用完可以刪了。

ce61b06f346282a94d10649cb19e958ffeb40797