由於DDL語句無法復原,如果誤刪除了表(例如DROP TABLE),可能會導致資料丟失。PolarDB提供了表資源回收筒的功能,刪除的表會被臨時轉移到表資源回收筒,因此您可以從表資源回收筒恢複誤刪的表。
背景資訊
關於更多表資源回收筒的資訊,請參見表資源回收筒。
前提條件
僅當叢集版本為PolarDB MySQL版8.0版本,且核心小版本為8.0.1.1.2及以上時,才支援表資源回收筒功能。
請確保誤刪除前已開啟表資源回收筒功能:設定叢集參數loose_recycle_bin為ON,設定參數值的具體操作請參見設定叢集參數和節點參數。
請確保誤刪表的時間點在表資源回收筒內資料的最長保留周期內。可設定叢集參數loose_recycle_bin_retention(單位:秒),來定義該最長保留周期,設定參數值的具體操作請參見設定叢集參數和節點參數。
操作步驟
執行如下語句,查看資源回收筒中所有臨時儲存的表。
CALL DBMS_RECYCLE.show_tables();返回結果如下:
+-----------------+---------------+---------------+--------------+---------------------+---------------------+ | SCHEMA | TABLE | ORIGIN_SCHEMA | ORIGIN_TABLE | RECYCLED_TIME | PURGE_TIME | +-----------------+---------------+---------------+--------------+---------------------+---------------------+ | __recycle_bin__ | __innodb_1063 | product_db | t1 | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 | | __recycle_bin__ | __innodb_1064 | product_db | t2 | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 | | __recycle_bin__ | __innodb_1065 | product_db | parent | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 | | __recycle_bin__ | __innodb_1066 | product_db | child | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 | +-----------------+---------------+---------------+--------------+---------------------+---------------------+ 4 rows in set (0.00 sec)返回結果中的參數說明如下:
參數
說明
SCHEMA
資源回收筒的Schema。
TABLE
進入資源回收筒後的表名。
ORIGIN_SCHEMA
原始表的Schema。
ORIGIN_TABLE
原始表的表名。
RECYCLED_TIME
回收時間。
PURGE_TIME
預計在資源回收筒中被清理的時間。
執行如下語句,快速恢複資源回收筒內的某張表。
CALL DBMS_RECYCLE.restore_table('RECYCLE_TABLE','DEST_DB','DEST_TABLE');說明PolarDB MySQL版8.0叢集版的Revision version為8.0.1.1.12或以上才支援通過
restore_table命令,快速恢複資源回收筒內的表。您可以參見查詢版本號碼確認叢集版本。該語句中的參數說明如下:
參數
說明
RECYCLE_TABLE
需要恢複的表在資源回收筒內的表名。
說明如果僅傳入此參數,會恢複到原始表。
DEST_DB
為恢複後的表指定目標資料庫。
DEST_TABLE
為恢複後的表指定新的表名。
樣本:
CALL dbms_recycle.restore_table('__innodb_1063','testDB','testTable');