由於DDL語句無法復原,開發或營運人員如果誤刪除表可能會導致資料丟失。AnalyticDB for MySQL支援表資源回收筒(Recycle Bin)功能,能夠將刪除的表臨時轉移到表資源回收筒,還可以設定保留的時間,方便您找回誤刪資料。
前提條件
AnalyticDB for MySQL叢集需為3.2.3.0及以上版本。
請在雲原生資料倉儲AnalyticDB MySQL控制台集群資訊頁面的配寘資訊地區,查看和升級核心版本。
請在雲原生資料倉儲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天將自動清理。您也可以通過RECYCLE_BIN_EXPIRED_TIME設定保留時間長度。
超過保留時間長度,自動清理:資源回收筒中,超過保留時間長度(RECYCLE_BIN_EXPIRED_TIME)的表,將自動清理。
超過表數量上限,自動清理:3.2.3.6、3.2.4.3、3.2.5.0及以上版本,如果建表時,表數量已經達到上限,則自動清理資源回收筒中最近即將到期的表。清理一張表,才能建立一張新的表。
說明資源回收筒會自動清理哪張表?
假設,資源回收筒中,有一張表明天到期,有一張表後天到期。此時會優先清理明天到期的表。
手動清理:您也可以手動執行
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。 |
RECYCLE_BIN_TABLE_COUNT_LIMIT_RATIO | (3.2.5.2及以上版本)表資源回收筒中表數量佔總表數量上限的比值,若超出,則自動清理最近的待清理表。預設值:1.0。更多資訊,請參見使用限制。 重要 清理線程會根據 |
RECYCLE_BIN_TABLE_COUNT_LIMIT | (3.2.5.2及以上版本)表資源回收筒中表數量上限,若超出,則自動清理最近的待清理表。預設值:5000。 |
管理表資源回收筒
顯示錶資源回收筒中的表
文法
顯示錶資源回收筒中所有表資訊。
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;