通過一個完整的資料全量備份(快照)以及後續一段時間的Redo日誌,就可以將部分庫或部分表的資料恢複到日誌儲存期限內任意時間點。在知曉誤操作發生的時間點後,可以通過此方式,將誤操作的資料庫或者表恢複到誤操作發生之前。
前提條件
已存在備份組。因為按時間點恢複是先將所選時間點前的一個全量資料備份恢複到叢集,然後根據Redo日誌恢複增量資料到所選時間點。若您希望提升恢複速度,可以開啟增強備份,從而縮短備份周期,增加備份密度。
適用範圍
叢集版本
庫表恢複功能支援PolarDB企業版和標準版,但對叢集的修訂版本有特定要求。不同情境下的最低版本要求如下表所示。
基礎功能:代表支援庫表恢複所需滿足的最低版本。
GDN主叢集/新版恢複流程:代表在全球資料庫(GDN)主叢集上使用,或想獲得新版恢複流程速度最佳化時,所需滿足的最低版本要求。
說明庫表恢複的新版恢複流程是在舊版的基礎上,對資料恢複至原叢集的速度進行了最佳化。其原理和速度可參見整體流程和預估時間。
版本系列 | MySQL 版本 | 架構 | 基礎功能(最低修訂版本) | GDN主叢集/新版恢複流程(最低修訂版本) |
企業版(叢集版) | 5.6 | X86 |
|
|
5.7 | X86 |
|
| |
8.0.1 | X86 |
|
| |
8.0.2 | X86 |
|
| |
標準版 | 5.6 | X86 |
|
|
5.7 | X86 |
|
| |
8.0.1 | X86 |
|
| |
倚天(ARM) |
|
| ||
8.0.2 | X86 |
|
|
您可在PolarDB MySQL版叢集的基本資料頁面的配置資訊地區查看當前叢集的核心版本。
其他限制
在使用庫表恢複功能時,請注意以下不支援的情境:
叢集:
不支援多主叢集(Limitless)和全球資料庫(GDN)中的從叢集。
在以下任一情況下,不支援對超過50,000張表的叢集進行庫表恢複:
儲存空間類型為ESSD雲端硬碟。
叢集中無唯讀(RO)節點。
表結構與索引:
不支援包含全域二級索引(GSI)的表。
不支援恢複列存索引(IMCI)。
儲存引擎:僅支援恢複InnoDB儲存引擎的表。
資料狀態:不支援恢複已歸檔為冷資料的表。
注意事項
時間點恢複是指選擇一個特定的時間點,對資料庫表進行恢複操作。恢複後,資料庫表將僅包含該時間點的資料,即此時資料庫中的表資料將與該時間點一致。
當前庫表恢複方式只支援從一級備份恢複,不支援從二級備份恢複。
庫表恢複只會恢複指定的表,操作時請確認已選中所有需要恢複的表。
說明若無法確定所有涉及的表,建議您使用叢集恢複的方式恢複全量叢集。
叢集內的表(包括系統資料表)超過50000張時也可以使用庫表恢複功能。
若選擇非整庫恢複,該庫每次最多支援恢複100張表。若選擇恢複庫,則支援恢複的表數量為該庫下所有的表。
說明若您需要恢複的表數量較多,建議您使用叢集恢複的方式恢複全量叢集。
庫表恢複功能不支援恢複觸發器(Trigger),若原表設定了Trigger,該Trigger不會被恢複。
庫表恢複功能不支援恢複外鍵(Foreign Key),若原表設定了Foreign Key,該Foreign Key不會被恢複。
建議在業務低峰期進行資料恢複。
步驟一、擷取誤操作的時間點
如果您已知誤操作的時間點,可以跳過本步驟。如果您不記得誤操作的具體時間點,可以通過此步驟查看。
方式一:SQL洞察
對於PolarDB MySQL叢集版,若叢集已開通SQL洞察功能,可通過該功能查看審計日誌,擷取誤操作的時間點。
SQL洞察功能僅支援查看開通該功能後產生的SQL日誌。因此若叢集未開通SQL洞察,可通過方式二查看誤操作時間點。
方式二:遠程擷取並解析Binlog日誌
- 為叢集開啟Binlog。詳細操作步驟,請參見開啟Binlog。說明 您需要先為叢集開啟Binlog才能查看並擷取Binlog日誌,否則將出現
You are not using binary logging錯誤提示。 - 在本機伺服器上安裝MySQL,並通過MySQL用戶端串連叢集。詳細操作步驟,請參見串連資料庫叢集。本文以Linux系統為例。

- 在已串連叢集的用戶端中執行如下命令查看目的地組群的Binlog檔案清單:
返回結果如下:show binary logs;+------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000005 | 2639 | +------------------+-----------+ 1 row in set (0.00 sec) - 在用戶端執行如下命令,遠程擷取Binlog日誌並儲存至本地。本文中以Linux系統為例,需先執行exit退出MySQL後,才能遠程擷取Binlog日誌並儲存至本地。
執行如下語句:mysqlbinlog -u<使用者名稱> -p<密碼> -h<串連地址> --read-from-remote-server --raw mysql-bin.******參數 說明 樣本值 -u叢集中的帳號名稱。 test_api-p以上帳號的密碼。如果此處留空,則在執行此命令後會被要求輸入。 TestPwd123-h叢集的公網串連地址。 說明- 若您的叢集串連地址使用的是預設的連接埠號碼3306,連接埠號碼可省略不寫,否則需要在串連地址後加上連接埠號碼。
- 當前僅支援通過主地址或叢集地址(包括預設叢集地址和自訂叢集地址)的公網串連地址遠程擷取Binlog。如何申請公網串連地址,請參見管理串連地址。
test-polardb.rwlb.rds.aliyuncs.com--raw表示將擷取到的Binlog檔案按資料原有格式列印,而不會展示解析後的資料。 --rawmysql-bin.******通過 show binary logs;命令擷取的目標Binlog檔案的名字,即Log_name。mysql-bin.000005樣本:mysqlbinlog -utest_api -p -htest-polardb.rwlb.rds.aliyuncs.com --read-from-remote-server --raw mysql-bin.000005 - 執行如下命令,通過mysqlbinlog工具查看Binlog記錄檔內容:
mysqlbinlog -vv --base64-output=decode-rows mysql-bin.****** | more說明-vv:查看具體SQL語句及備忘。--base64-output=decode-rows:解析Binlog記錄檔。
具體的Binlog日誌內容如下圖中紅框所示部分:

- 在擷取Binlog記錄檔內容後,可參見解析Binlong日誌進行Binlog日誌解析。
步驟二、開始庫表恢複
登入PolarDB控制台,在左側導覽列單擊叢集列表,選擇叢集所在地區,並單擊目的地組群ID進入叢集詳情頁。
在左側導覽列中,選擇,單擊库(表)恢复。
在彈出的對話方塊中,選擇恢复方式為按时间点,並選擇需要恢复至的時間點。
說明恢复至的時間點選擇需符合可恢复时间点的限制,同時離該時間點最近一份全量備份組中必須存在需要恢複的表,才能正常使用按时间点恢複功能。可恢復點的範圍與備份設定中的日志备份保留期限有關,預設為7天。
庫表恢複功能根據所佔用的IOPS可分為快速、常規和安全三種配置,您可以根據實際需求進行選擇。恢複速度配置的預估耗時請參見庫表恢複速度測試資料參考。
快速:向當前叢集恢複資料期間,可能佔用大量IOPS(約60%),建議在業務低峰期選擇。
常規【推薦】:向當前叢集恢複資料期間,可能佔用部分IOPS(約30%)。
安全:向當前叢集恢複資料期間,僅佔用少量IOPS(約15%),可能會大幅影響恢複速度。
在需要恢复的库和表地區左側,選中需要恢複的目標庫,並在右側選中目標表。
說明若您未指定庫名和表名,則系統會通過在原庫名或原表名後添加
_backup的方式,來自動產生新的庫名和表名。如原表為test,則自動產生的新的表名為test_backup。若選中目標庫後但未指定具體的資料表,預設恢複該庫下的所有資料。
確認已選擇您需要恢複的庫和表後,單擊确定即可。
步驟三、進行資料比對
當庫表恢複完成後,您可以登入叢集進行資料比對,驗證資料。
您可通過DMS登入叢集,也可通過其他用戶端或命令列的方式。本文介紹通過DMS登入叢集進行驗證,關於其他方式,請參考串連資料庫叢集。
在叢集的基本信息頁面右上方,單擊登录数据库。

在彈出的對話方塊中,輸入集群的資料庫帳號和資料庫密碼,單擊登入。

登入DMS後請重新整理頁面,在左側導覽列中,單擊已登入執行個體。
在已登入執行個體列表中,單擊目的地組群名稱,找到並雙擊目標資料庫名稱,即可切換到目標資料庫進行管理。

尋找到誤操作的資料,確認其是否已恢複到誤操作前,且其他資料也和誤操作發生前一致。