·
華爲雲ECS網站服務器,服務器採用linux操做系統,數據庫版本號5.6,。
在執行數據庫版本更新測試時,錯誤地將本應在測試庫執行的sql腳本執行於生產庫,致使部分表被truncate,
另有部分表內少許數據被delete。該實例內數據表均採用innodb做爲默認存儲引擎。
·mysql
恢復被truncat的8個表以及被少許數據被delete的4個表。
·linux
·
1.分區備份
.·
因爲客戶ECS內有其餘業務仍在運行,
爲保證被truncate表底層數據不被破壞首先對mysql的data目錄所在分區進行備份。
·
2.獲取數據庫碎片
·
因爲客戶須要恢復的12個表內不存在大字段類型值和myisam引擎表,
爲節約數據傳輸時間,經過掃描數據段並下載獲取恢復所必須的數據庫段碎片。
另外innodb引擎數據恢復必須依賴表結構信息,mysql的表結構信息存儲於對應表名的.frm文件內。
在本恢復案例中frm文件無缺,可直接使用。下載須要恢復的表對應的frm文件。
·
3.分析系統表。
·
讀取數據段內系統表信息,獲取須要恢復的12個表在系統表內的註冊信息。
·
4.恢復被truncate的表。
·
在下載完成的數據段文件內提取對應於各表的數據頁,
解析對應表的frm文件獲取到該表的表結構信息。
經過表結構信息獲取到底層數據分配規則後。
·
5.恢復被delete數據的表,
·
基本流程同truncate表的恢復,
不一樣點在於數據解析時須要提取被標註爲「delete」的記錄。
·
6.數據還原。
·
根據解析出的表結構信息在恢復環境中的mysql實例內建立表,
並將恢復出的數據導入sql
·
7.數據清洗。
·
因爲直接從底層抓取出的記錄可能存在主鍵不惟一和記錄重複以及亂碼等狀況,
提取出的記錄可能存在異常須要進行人工處理。
·
8.數據驗證。
·
開啓遠程桌面,由客戶進行數據驗證是否正確、數據量是否正常。
通過客戶驗證,truncate表恢復完整,delete記錄的表恢復完整,數據恢復流程完畢。數據庫