由於DDL語句無法復原,開發或營運人員如果誤刪除表可能會導致資料丟失。AnalyticDB for MySQL支援表資源回收筒(Recycle Bin)功能,能夠將刪除的表臨時轉移到表資源回收筒,還可以設定保留的時間,方便您找回誤刪資料。
前提條件
AnalyticDB for MySQL叢集需為3.2.3.0及以上版本。
查看企業版、基礎版或湖倉版叢集的核心版本,請執行
SELECT adb_version();。如需升級核心版本,請聯絡支援人員。請在雲原生資料倉儲AnalyticDB MySQL控制台的集群資訊頁面的配寘資訊地區,查看和升級數倉版叢集的核心版本。操作詳情請參見查看和升級版本。
注意事項
表資源回收筒功能僅支援AnalyticDB for MySQL內表(即表引擎為XUANWU或XUANWU_V2的表)。外表(External Table)不支援此功能。
執行
INSERT OVERWRITE SELECT任務時,若進行DROP TABLE操作,刪除的表會進入資源回收筒,INSERT OVERWRITE SELECT任務會執行失敗。執行
BUILD任務時,若進行DROP TABLE操作,刪除的表會進入資源回收筒,BUILD任務會繼續正常執行直到結束。進入資源回收筒的表,依然會佔用儲存空間。
表資源回收筒介紹
表資源回收筒用於臨時存放已刪除的表。首次執行DROP操作時,AnalyticDB for MySQL會建立一個名為ADB_RECYCLE_BIN的隱藏庫,並將已刪除的表遷移到ADB_RECYCLE_BIN資料庫。
回收機制
通過DROP TABLE命令刪除的表,會自動遷移到表資源回收筒。
通過DROP TABLE ... FORCE命令強制移除的表將直接被刪除,不會進入表資源回收筒。
保留時間長度與清理機制
表進入資源回收筒後,預設保留3天。超過3天將自動清理。您可以通過配置參數設定保留時間長度和清理機制。配置方法請參見資源回收筒配置。您也可以手動執行PURGE操作清理資源回收筒。具體用法請參見刪除資源回收筒中的表。
資源回收筒支援的操作
資源回收筒表命名規則
表資源回收筒會從不同的資料庫回收表到統一的ADB_RECYCLE_BIN資料庫中。為了保證表名的唯一性,定義如下命名格式:原資料庫名_原表名_進入資源回收筒的時間戳記。
例如:某使用者在2024年1月1日00:00:00刪除了adb_demo庫中的customer表,則這張表在表資源回收筒中重新命名為:adb_demo_customer_1704038400000。
如果新表名的長度超過了表名的長度上限,會自動按照原表名、原庫名的順序進行命名裁剪。因此,新表名中的原資料庫名和原表名可能會有部分缺失。
當資源回收筒中已經有被刪除的相同表,新刪除的表仍會進入資源回收筒,需要根據時間戳記來進行區分。
資源回收筒配置
您可以通過SET ADB_CONFIG命令修改相關配置。
參數 | 說明 |
DROP_FORCE | 執行 |
RECYCLE_BIN_EXPIRED_TIME | 進入表資源回收筒後的保留時間。修改該配置對已經在表資源回收筒中的表不生效。單位:毫秒(ms)。預設值:259200000,即3天。 重要 為了避免磁碟空間被佔滿,建議合理設定保留時間。 |
ENABLE_RECYCLE_BIN_CLEAN_EXPIRED_TABLE | 是否開啟表資源回收筒的非同步清理任務線程。預設值:TRUE。 重要 建議保持非同步清理任務線程的預設開啟狀態。 |
RECYCLE_BIN_CLEAN_EXPIRED_TABLE_INTERVAL | 表資源回收筒非同步清理任務線程的輪詢間隔。單位:毫秒(ms)。預設值:60000。 |
管理表資源回收筒
顯示錶資源回收筒中的表
文法
顯示錶資源回收筒中所有表資訊。
SHOW RECYCLE_BIN ALL;顯示錶資源回收筒中指定表資訊,可能包含同名庫的同名表。
SHOW RECYCLE_BIN TABLE <原資料庫名>.<原表名>;顯示錶資源回收筒中指定表資訊,可能包含多個庫的同名表。
SHOW RECYCLE_BIN TABLE <原表名>;顯示錶資源回收筒中指定庫所包含的表。
SHOW RECYCLE_BIN DATABASE <原資料庫名>;
樣本
查看錶資源回收筒中所有表,樣本語句如下:
SHOW RECYCLE_BIN ALL;返回結果:
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+ | userName | schemaName | tableName | originSchemaName | originTableName | recycledTime | expiredTime | +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+ | testUser | ADB_RECYCLE_BIN | adb_demo_customer_1720086117277 | adb_demo | customer | 2024-07-04 17:42:00 | 2024-07-07 17:42:00 | | testUser | ADB_RECYCLE_BIN | adb_demo_orders_1720086094102 | adb_demo | orders | 2024-07-04 17:41:37 | 2024-07-07 17:41:37 | | testUser | ADB_RECYCLE_BIN | testdb_customer_1720085752664 | testdb | customer | 2024-07-04 17:35:56 | 2024-07-07 17:35:56 | +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+查看錶資源回收筒中的指定表adb_demo.customer,樣本語句如下:
SHOW RECYCLE_BIN TABLE adb_demo.customer;返回結果:
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+ | userName | schemaName | tableName | originSchemaName | originTableName | recycledTime | expiredTime | +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+ | testUser | ADB_RECYCLE_BIN | adb_demo_customer_1720086117277 | adb_demo | customer | 2024-07-04 17:42:00 | 2024-07-07 17:42:00 | +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+查看所有原始表名為customer的表,樣本語句如下:
SHOW RECYCLE_BIN TABLE customer;返回結果:
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+ | userName | schemaName | tableName | originSchemaName | originTableName | recycledTime | expiredTime | +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+ | testUser | ADB_RECYCLE_BIN | adb_demo_customer_1720086117277 | adb_demo | customer | 2024-07-04 17:42:00 | 2024-07-07 17:42:00 | | testUser | ADB_RECYCLE_BIN | testdb_customer_1720085752664 | testdb | customer | 2024-07-04 17:35:56 | 2024-07-07 17:35:56 | +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+查看所有原資料庫為adb_demo的表,樣本語句如下:
SHOW RECYCLE_BIN DATABASE adb_demo;返回結果:
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+ | userName | schemaName | tableName | originSchemaName | originTableName | recycledTime | expiredTime | +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+ | testUser | ADB_RECYCLE_BIN | adb_demo_customer_1720086117277 | adb_demo | customer | 2024-07-04 17:42:00 | 2024-07-07 17:42:00 | | testUser | ADB_RECYCLE_BIN | adb_demo_orders_1720086094102 | adb_demo | orders | 2024-07-04 17:41:37 | 2024-07-07 17:41:37 | +----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
恢複原始表
規則
恢複後的表仍然使用進入資源回收筒前的原表名。
若在恢複時,原資料庫已經存在同名表,請按照提示先對原資料中的同名表進行更名、刪除或移動到其他資料庫等操作。
若在大量復原時,表資源回收筒中有多張表的原庫名和原表名相同,只是時間戳記不同。則會按時間戳記倒序先恢複第一張表,恢複第二張表時會出現報錯,請按照提示先對原資料中已恢複的同名表進行更名、刪除或移動到其他資料庫等操作。
文法
恢複表資源回收筒中所有表到原資料庫。
RESTORE RECYCLE_BIN ALL;恢複表資源回收筒中指定表到原資料庫。
RESTORE RECYCLE_BIN TABLE <ADB_RECYCLE_BIN資料庫中的表名>;
樣本
恢複表資源回收筒中的指定表adb_demo_customer_1720086117277,樣本語句如下:
RESTORE RECYCLE_BIN TABLE adb_demo_customer_1720086117277;刪除資源回收筒中的表
文法
刪除表資源回收筒中所有表。
PURGE RECYCLE_BIN ALL;刪除表資源回收筒中指定表。
PURGE RECYCLE_BIN TABLE <ADB_RECYCLE_BIN資料庫中的表名>;
樣本
永久刪除表資源回收筒中指定表adb_demo_customer_1720086117277,樣本語句如下:
PURGE RECYCLE_BIN TABLE adb_demo_customer_1720086117277;修改自動保留時間
文法
修改表資源回收筒的自動保留時間。
SET adb_config RECYCLE_BIN_EXPIRED_TIME=<自訂的自動保留時間>;修改後的自動保留時間僅作用於修改配置後刪除的表,在修改之前已在資源回收筒的表仍將遵循以前的配置。
樣本
修改表資源回收筒的自動保留時間為2天,樣本語句如下:
#注意單位為毫秒,則樣本自動保留時間為:2 * 24 * 3600 * 1000 = 172800000(ms)
SET adb_config RECYCLE_BIN_EXPIRED_TIME=172800000;