通過一個完整的數據全量備份(快照)以及后續一段時間的Redo日志,就可以將部分庫或部分表的數據恢復到日志保存期限內任意時間點。在知曉誤操作發生的時間點后,可以通過此方式,將誤操作的數據庫或者表恢復到誤操作發生之前。
前提條件
已存在備份集。因為按時間點恢復是先將所選時間點前的一個全量數據備份恢復到集群,然后根據Redo日志恢復增量數據到所選時間點。若您希望提升恢復速度,可以開啟增強備份,從而縮短備份周期,增加備份密度。
版本要求和使用限制
版本要求
您可以通過查詢版本號來確認集群版本。
當前PolarDB MySQL版的企業版和標準版都支持庫表恢復功能,具體版本要求及限制如下。
PolarDB企業版支持庫表恢復。目前僅集群版系列支持庫表恢復功能,集群版本要求如下:
PolarDB MySQL版5.6版本,修訂版本需為5.6.1.0.25及以上。
PolarDB MySQL版5.7版本,修訂版本需為5.7.1.0.8及以上。
PolarDB MySQL版8.0.1版本,修訂版本需為8.0.1.1.14及以上。
PolarDB MySQL版8.0.2版本,修訂版本需為8.0.2.2.0及以上。
PolarDB標準版支持庫表恢復,集群版本要求如下:
PolarDB MySQL版5.7版本X86架構,修訂版本需為5.7.1.0.30及以上。
PolarDB MySQL版8.0.1版本X86架構,修訂版本需為8.0.1.1.38.2及以上。
PolarDB MySQL版8.0.2版本X86架構,修訂版本需為8.0.2.2.21及以上。
PolarDB MySQL版8.0.1版本倚天(ARM)架構,修訂版本需為8.0.1.1.41及以上。
若存儲類型為云盤,則不支持50000張表以上的庫表恢復。
GDN中的主集群支持庫表恢復功能,集群版本要求如下:
企業版
PolarDB MySQL版5.6版本,修訂版本為5.6.1.0.42及以上。
PolarDB MySQL版5.7版本,修訂版本需為5.7.1.0.30及以上。
PolarDB MySQL版8.0.1版本,修訂版本需為8.0.1.1.44及以上。
PolarDB MySQL版8.0.2版本,修訂版本需為8.0.2.2.25.3及以上。
標準版
PolarDB MySQL版5.6版本,修訂版本為5.6.1.0.42及以上。
PolarDB MySQL版5.7版本,修訂版本需為5.7.1.0.30及以上。
PolarDB MySQL版8.0.1版本,修訂版本需為8.0.1.1.38.2及以上。
PolarDB MySQL版8.0.2版本,修訂版本需為8.0.2.2.21及以上。
支持使用庫表恢復新版的集群版本要求如下:
企業版
PolarDB MySQL版5.6版本,修訂版本為5.6.1.0.42及以上。
PolarDB MySQL版5.7版本,修訂版本需為5.7.1.0.30及以上。
PolarDB MySQL版8.0.1版本,修訂版本需為8.0.1.1.44及以上。
PolarDB MySQL版8.0.2版本,修訂版本需為8.0.2.2.25.3及以上。
標準版
PolarDB MySQL版5.6版本,修訂版本為5.6.1.0.42及以上。
PolarDB MySQL版5.7版本,修訂版本需為5.7.1.0.30及以上。
PolarDB MySQL版8.0.1版本,修訂版本需為8.0.1.1.38.2及以上。
PolarDB MySQL版8.0.2版本,修訂版本需為8.0.2.2.21及以上。
說明庫表恢復新版是在庫表恢復舊版的基礎上,對數據恢復至原集群的速度進行了優化。其原理和速度可參見整體流程和預估時間。
使用限制
PolarDB多主集群(庫表)不支持庫表恢復。
不支持在包含全局二級索引(Global Secondary Index)的表上使用庫表恢復功能。
如果實例沒有RO節點,超過50000張表時將不支持庫表恢復功能。
不支持在GDN中的從集群上使用庫表恢復功能。
庫表恢復功能不支持恢復列存索引。
不支持在歸檔為冷數據的表上使用庫表恢復功能。
庫表恢復功能只支持恢復以InnoDB為存儲引擎的表。
若您當前集群不支持使用庫表恢復功能,您可以通過全量恢復方式1:從備份集恢復或全量恢復方式2:恢復到過去時間點的方式將數據恢復到新的集群,再將數據遷移至原集群。
注意事項
當前庫表恢復方式只支持從一級備份恢復,不支持從二級備份恢復。
庫表恢復只會恢復指定的表,操作時請確認已選中所有需要恢復的表。
說明若無法確定所有涉及的表,建議您使用集群恢復的方式恢復全量集群。
集群內的表(包括系統表)超過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文件按數據原有格式打印,而不會展示解析后的數據。 --raw
mysql-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日志解析。
步驟二、開始庫表恢復
- 進入集群詳情頁,在左側導航欄中,選擇 。
在備份恢復頁面,單擊庫(表)恢復。
在彈出的對話框中,您可以根據業務需要選擇恢復方式為按時間點,并在恢復至中選擇要恢復到的過去的時間點,即誤操作發生前的時間。
說明恢復至的時間點需符合可恢復時間點的限制,即僅支持恢復到7天內的任意時間點。
在需要恢復的庫和表區域左側,選中需要恢復的目標庫,并在右側選中目標表。
說明若選中目標庫后但不指定具體的數據表,默認恢復該庫下的所有數據。
選中目標庫或目標表后,系統會自動在原庫或原表名稱(如
test
)后加_backup
作為新庫或新表的名稱(如test_backup
),您也可以自定義恢復后的庫名或表名。
單擊確定即可。
步驟三、進行數據比對
當庫表恢復完成后,您可以登錄集群進行數據比對,驗證數據。
您可通過DMS登錄集群,也可通過其他客戶端或命令行的方式。本文介紹通過DMS登錄集群進行驗證,關于其他方式,請參考連接數據庫集群。
在集群的基本信息頁面右上角,單擊登錄數據庫。
在彈出的對話框中,輸入集群的數據庫賬號和數據庫密碼,單擊登錄。
登錄DMS后請刷新頁面,在左側導航欄中,單擊已登錄實例。
在已登錄實例列表中,單擊目標集群名稱,找到并雙擊目標數據庫名稱,即可切換到目標數據庫進行管理。
查找到誤操作的數據,確認其是否已恢復到誤操作前,且其他數據也和誤操作發生前一致。