データ定義言語 (DDL) ステートメントはロールバックできません。 たとえば、開発者または運用保守 (O&M) エンジニアがdrop tableステートメントを使用してテーブルを削除すると、テーブルのデータが失われる可能性があります。 Alibaba Cloudはごみ箱機能を提供しており、削除されたテーブルを一時的に保存できます。 ドロップされたテーブルを取得できる保持期間を指定できます。 Alibaba Cloudは、ごみ箱にドロップされたテーブルの管理に役立つDBMS_RECYCLEパッケージも提供しています。
前提条件
- 20191225以降のマイナーエンジンバージョンを使用したMySQL 8.0
- 20210430以降のマイナーエンジンバージョンを使用したMySQL 5.7
パラメーター
次の表に、ごみ箱機能に設定できるパラメーターを示します。
パラメーター | 説明 |
loose_recycle_bin | ごみ箱機能を有効にするかどうかを指定します。 この機能は、RDSインスタンスまたは特定のセッションに対して有効にできます。 このパラメーターは、ApsaraDB RDSコンソールで再設定できます。 デフォルト値: OFF。 |
loose_recycle_bin_保持 | ごみ箱にテーブルを保持する期間。 単位は秒です。 デフォルト値: 604800 デフォルト値は7日です。 このパラメーターは、ApsaraDB RDSコンソールで再設定できます。 |
loose_recycle_scheduler | ごみ箱からテーブルを非同期で削除するスレッドを有効にするかどうかを指定します。 このパラメーターは、ApsaraDB RDSコンソールで再設定できます。 デフォルト値: OFF。 |
loose_recycle_scheduler_interval | ごみ箱からテーブルを非同期に削除するために使用されるスレッドの後のポーリング間隔。 単位は秒です。 デフォルト値:30。 このパラメーターは一時的に使用できません。 |
loose_recycle_scheduler_purge_table_print | システムが非同期でごみ箱をクリアするときに生成されるログを記録するかどうかを指定します。 デフォルト値: OFF。 このパラメーターは一時的に使用できません。 |
概要
- リサイクルと削除
- Recycling
TRUNCATE TABLE
ステートメントを実行してテーブルを切り捨てた場合、ApsaraDB RDSは切り捨てられたテーブルをごみ箱に移動します。 次に、ApsaraDB RDSは、切り捨てられたテーブルの元のディレクトリにある切り捨てられたテーブルと同じスキーマを使用する空のテーブルを作成します。説明 このメカニズムは、20200331以降のマイナーエンジンバージョンでMySQL 8.0を実行するRDSインスタンスでのみサポートされます。DROP TABLEまたはDROP DATABASE
ステートメントを実行してテーブルまたはデータベースを削除すると、ApsaraDB RDSは削除されたテーブルのみをごみ箱に移動します。 ApsaraDB RDSは、次のポリシーに基づいて他のすべてのオブジェクトを管理します。- オブジェクトとドロップされたテーブルとの間にリレーションシップが確立されていない場合、ApsaraDB RDSは、実行されたステートメントに基づいてオブジェクトを保持するかどうかを決定します。 ApsaraDB RDSはオブジェクトをごみ箱に移動しません。
- オブジェクトが削除されたテーブルに基づいており、これらのテーブルのデータに変更が発生する可能性がある場合、ApsaraDB RDSはオブジェクトを削除します。 これらのオブジェクトは、トリガおよび外部キーを含む。 ApsaraDB RDSは列統計を削除しません。 これらの統計は、ドロップされたテーブルと共にごみ箱に保存されます。
- 削除
ごみ箱は、ごみ箱からテーブルを非同期的に削除するバックグラウンドスレッドを開始します。 これらのテーブルは、recycle_bin_retentionパラメーターで指定された期間よりも長くごみ箱に格納されます。 ごみ箱内のテーブルのサイズが大きい場合、ApsaraDB RDSは別のバックグラウンドスレッドを起動してテーブルを非同期で削除します。
- Recycling
- 権限コントロール
RDSインスタンスを起動すると、__recycle_bin__ という名前のデータベースが作成され、ごみ箱に移動されたデータが格納されます。 __recycle_bin__ データベースはシステムデータベースであり、変更または削除することはできません。
DROP TABLE
ステートメントを実行して、ごみ箱からテーブルを削除することはできません。 ただし、call dbms_recycle.purge_table('<TABLE>');
メソッドを使用して、ごみ箱からテーブルを削除できます。説明 使用するアカウントには、RDSインスタンスとごみ箱の両方でDROPステートメントを実行する権限が必要です。 - ごみ箱での表の命名 __recycle_bin__ データベース内のテーブルは、異なるデータベースに由来し、同じ名前を持つことができます。 各テーブルがごみ箱内で一意の名前を持つようにするために、ApsaraDB RDSは次の命名規則を実装します。
"__" + <Storage Engine> + <SE private id>
次の表に、命名規則のパラメーターを示します。
パラメーター 説明 ストレージエンジン テーブルで使用されるストレージエンジンの名前。 SEプライベートid テーブルを識別するためにストレージエンジンによって生成される一意の値。 たとえば、InnoDBテーブルを識別するために使用される一意の値は、テーブルのIDです。 - 独立したリサイクル
RDSインスタンスのごみ箱の設定は、そのRDSインスタンスにのみ適用されます。 この設定は、バイナリログがレプリケートされるセカンダリ、読み取り専用、またはディザスタリカバリRDSインスタンスには適用されません。 たとえば、プライマリRDSインスタンスで7日間の保持期間を指定し、セカンダリRDSインスタンスで14日間の保持期間を指定できます。
説明 RDSインスタンスのストレージ使用量は、インスタンスで指定した保持期間によって異なります。
注意事項
- __recycle_bin__データベースとテーブルが異なるファイルシステムにある場合、ApsaraDB RDSは、
DROP table
ステートメントを実行してテーブルを削除した後、テーブルを格納するテーブルスペースから関連するデータファイルを移行する可能性があります。 このプロセスには時間がかかります。 - 一般的なテーブルスペースには、複数のテーブルを格納できます。 DROP TABLEステートメントを実行して一般テーブルスペースからテーブルを削除した場合、ApsaraDB RDSは関連データファイルを一般テーブルスペースから移行しません。
ごみ箱を管理する
AliSQLは、DBMS_RECYCLEパッケージで次の管理方法を提供します。
- show_tables ごみ箱に一時的に保存されているすべてのテーブルを表示するために使用されます。 このメソッドを使用するには、次のコマンドを実行します。
call dbms_recycle.show_tables();
例:
mysql> dbms_recycle.show_tables() を呼び出します。+ ----------------- + ------------------------------------------------------------- --------------------- + --------------------- + | スキーマ | テーブル | 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 | 親 | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 | | __recycle_bin__ |_innodb_1066 | product_db | 子 | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 | + ----------------- + ------------------------------------------------------------- --------------------- + --------------------- + セットの4列 (0.00秒)
パラメーター 説明 スキーマ テーブルがごみ箱に移動された後にテーブルを格納するデータベースの名前。 テーブル テーブルがごみ箱に移動された後のテーブルの名前。 ORIGIN_SCHEMA テーブルがごみ箱に移動される前にテーブルを格納するデータベースの名前。 ORIGIN_TABLE テーブルがごみ箱に移動される前のテーブルの名前。 リサイクル_時間 テーブルがごみ箱に移動された時刻。 パージ_時間 ごみ箱からテーブルが削除される予定の時刻。 - purge_table このメソッドは、ごみ箱からテーブルを手動で削除するために使用されます。 このメソッドを使用するには、次のコマンドを実行します。
call dbms_recycle.purge_table('<TABLE>');
説明- TABLEパラメーターは、テーブルがごみ箱に移動された後のテーブルの名前を指定します。
- 使用するアカウントには、RDSインスタンスとごみ箱の両方でDROPステートメントを実行する権限が必要です。
例:
dbms_recycle.purge_table('__innodb_1063') を呼び出します。
- restore_table
このメソッドは、ごみ箱からテーブルを復元するために使用されます。 このメソッドを使用するには、次のコマンドを実行します。
dbms_recycle.restore_table('<RECYCLE_TABLE>','<DEST_DB>','<DEST_TABLE>') を呼び出します。
次の表に、このメソッドのパラメーターを示します。
パラメーター 説明 RECYCLE_TABLE ごみ箱内のテーブルの名前。 説明 このパラメーターのみを設定すると、ApsaraDB RDSはデータを元のテーブルに復元します。DEST_DB テーブルを復元するターゲットデータベースの名前。 DEST_テーブル テーブルを復元する宛先テーブルの名前。 説明 restore_tableコマンドを実行するには、スーパーユーザーの資格情報が必要です。 したがって、このコマンドは実行できません。例:
mysql> dbms_recycle.restore_table('__innodb_1063','testDB','testTable') を呼び出します。