テーブルのゴミ箱は、DROP TABLE 文による偶発的なデータ損失からデータを保護します。ドロップされたテーブルは ADB_RECYCLE_BIN という名前の非表示のデータベースに移動され、デフォルトで 3 日間保持されます。これにより、完全に削除される前にテーブルを回復する時間が確保されます。
前提条件
開始する前に、以下が満たされていることを確認してください。
-
V3.2.3.0 以降を実行している AnalyticDB for MySQL クラスター
マイナーバージョンをアップグレードするには、テクニカルサポートにご連絡ください。Data Warehouse エディションのクラスターについては、「クラスターのマイナーバージョンを更新する」をご参照ください。
制限事項
-
サポートされるテーブルタイプ:エンジンが XUANWU または XUANWU_V2 の内部テーブルのみ。外部テーブルはサポートされていません。
-
ゴミ箱内のテーブルは、引き続きディスクストレージを消費します。
-
DROP TABLEの実行中にINSERT OVERWRITE SELECTを実行すると、テーブルはゴミ箱に移動し、INSERT OVERWRITE SELECT文は失敗します。 -
DROP TABLEの実行中にBUILDを実行すると、テーブルはゴミ箱に移動しますが、BUILD文は中断されません。 -
ゴミ箱関連の文 (SHOW、RESTORE、PURGE) を実行するには、ソーステーブルに対する
DROP権限が必要です。ゴミ箱内のテーブルでは、PURGE、RESTORE、SHOW 文のみがサポートされています。
仕組み
初めて DROP TABLE 文を実行すると、AnalyticDB for MySQL は ADB_RECYCLE_BIN という名前の非表示のデータベースを作成し、ドロップされたテーブルをそこに移動します。その後の DROP TABLE 文では、テーブルは同じデータベースに移動されます。
DROP TABLE ... FORCE はテーブルを完全に削除し、ゴミ箱をバイパスします。
保存期間とクリーンアップメカニズム
テーブルがゴミ箱に入ると、デフォルトで 3 日間保持され、保存期間が過ぎると自動的に削除されます。RECYCLE_BIN_EXPIRED_TIME を設定することで、保存期間をカスタマイズできます。
-
保存期間が過ぎた後の自動クリーンアップ:ゴミ箱内のテーブルで保存期間 (RECYCLE_BIN_EXPIRED_TIME) を超えたものは自動的に削除されます。
-
テーブル数の上限に達した場合の自動クリーンアップ:V3.2.3.6、V3.2.4.3、V3.2.5.0 以降のバージョンでは、テーブル作成時にテーブル数がすでに上限に達している場合、システムはゴミ箱内で最も有効期限が近いテーブルを自動的に削除します。新しいテーブルを作成する前に、1 つのテーブルを削除する必要があります。
説明ゴミ箱はどのテーブルを自動的に削除しますか?
ゴミ箱に明日期限切れになるテーブルと明後日期限切れになるテーブルが 1 つずつあるとします。明日期限切れになるテーブルが先に削除されます。
-
手動クリーンアップ:手動で
PURGEを実行してゴミ箱をクリーンアップできます。詳細については、「ゴミ箱からテーブルを削除する」をご参照ください。
命名規則
異なるデータベースのテーブルは、1 つのゴミ箱に保存されます。一意の名前を保証するために、各テーブルは SourceDatabaseName_SourceTableName_Timestamp のフォーマットで名前が変更されます。
例:adb_demo データベースの customer テーブルが 2024 年 1 月 1 日 00:00:00 にドロップされた場合、adb_demo_customer_1704038400000 に名前が変更されます。
-
結合された名前が最大長を超えた場合、ソースデータベース名とテーブル名は順に切り捨てられ、不完全に表示されることがあります。
-
同じデータベースから同じテーブル名が再度ドロップされた場合、異なるタイムスタンプで保存されます。
ゴミ箱の設定
SET ADB_CONFIG を使用してゴミ箱を設定します。
| パラメーター | デフォルト | 説明 |
|---|---|---|
DROP_FORCE |
FALSE |
TRUE に設定すると、DROP TABLE 時にテーブルを完全に削除し、ゴミ箱をバイパスします。FALSE に設定すると、テーブルをゴミ箱に移動します。 |
RECYCLE_BIN_EXPIRED_TIME |
259200000 (3 日) |
保存期間 (ミリ秒単位)。この設定を変更した後にドロップされたテーブルにのみ適用されます。ゴミ箱に既にあるテーブルは、元の保存期間を保持します。 |
ENABLE_RECYCLE_BIN_CLEAN_EXPIRED_TABLE |
TRUE |
バックグラウンドのクリーンアップスレッドを有効または無効にします。トラブルシューティングで必要な場合を除き、無効にしないでください。 |
RECYCLE_BIN_CLEAN_EXPIRED_TABLE_INTERVAL |
60000 (60 秒) |
クリーンアップスレッドが実行される間隔 (ミリ秒単位)。 |
RECYCLE_BIN_TABLE_COUNT_LIMIT_RATIO |
1.0 |
(V3.2.5.2 以降) テーブル総数の上限に対する、ゴミ箱内のテーブル数の比率。この比率を超えると、システムはゴミ箱内で最も最近追加されたテーブルを自動的にクリーンアップします。詳細については、「使用制限」をご参照ください。 重要
クリーンアップスレッドは、 |
RECYCLE_BIN_TABLE_COUNT_LIMIT |
5000 |
(V3.2.5.2 以降) ゴミ箱に保存できるテーブルの最大数。この数を超えると、システムは最も最近追加されたテーブルを自動的にクリーンアップします。 |
保存期間の変更
SET adb_config RECYCLE_BIN_EXPIRED_TIME=<RetentionPeriodInMilliseconds>;
新しい保存期間は、この変更後にドロップされたテーブルにのみ適用されます。ゴミ箱に既にあるテーブルは、元の有効期限を保持します。
例:保存期間を 2 日に設定します。
-- 2 日 = 2 × 24 × 3600 × 1000 = 172,800,000 ms
SET adb_config RECYCLE_BIN_EXPIRED_TIME=172800000;
ゴミ箱内のテーブルのクエリ
構文
-- ゴミ箱内のすべてのテーブルを一覧表示
SHOW RECYCLE_BIN ALL;
-- 特定のソースデータベースとテーブル名のテーブルを一覧表示
SHOW RECYCLE_BIN TABLE <SourceDatabaseName>.<SourceTableName>;
-- ソーステーブル名でテーブルを一覧表示 (すべてのデータベースを対象)
SHOW RECYCLE_BIN TABLE <SourceTableName>;
-- 特定のソースデータベースのすべてのテーブルを一覧表示
SHOW RECYCLE_BIN DATABASE <SourceDatabaseName>;
例
ゴミ箱内のすべてのテーブルを一覧表示:
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 ALL;
-- ゴミ箱の名前を使用して特定のテーブルを復元
RESTORE RECYCLE_BIN TABLE <RecycleBinTableName>;
<RecycleBinTableName> は、SHOW RECYCLE_BIN の出力の tableName 列に表示される名前です (フォーマット:SourceDatabaseName_SourceTableName_Timestamp)。
特定バージョンのテーブルの復元
ドロップされたテーブルの複数のバージョンがゴミ箱に存在する場合、次の手順で特定のバージョンを復元します。
-
ゴミ箱をクエリして、すべてのバージョンとそのゴミ箱での名前を検索します。
SHOW RECYCLE_BIN TABLE <SourceTableName>; -
recycledTime列とtableNameのタイムスタンプサフィックスを比較して、対象のバージョンを特定します。 -
ゴミ箱での名前を使用して、特定のバージョンを復元します。
RESTORE RECYCLE_BIN TABLE <RecycleBinTableName>;
例:2024-07-04 17:42:00 のドロップ前の状態に customer テーブルを復元するには、次のようにします。
RESTORE RECYCLE_BIN TABLE adb_demo_customer_1720086117277;
ゴミ箱からのテーブルの削除
PURGE を使用して、有効期限が切れる前にゴミ箱からテーブルを完全に削除します。
構文
-- ゴミ箱からすべてのテーブルを完全に削除
PURGE RECYCLE_BIN ALL;
-- ゴミ箱から特定のテーブルを完全に削除
PURGE RECYCLE_BIN TABLE <RecycleBinTableName>;
例
adb_demo_customer_1720086117277 テーブルを完全に削除します。
PURGE RECYCLE_BIN TABLE adb_demo_customer_1720086117277;