ALTER [UNDO] TABLESPACE tablespace_name
NDB only:
{ADD | DROP} DATAFILE 'file_name'
[INITIAL_SIZE [=] size]
[WAIT]
InnoDB and NDB:
[RENAME TO tablespace_name]
InnoDB only:
[AUTOEXTEND_SIZE [=] 'value']
[SET {ACTIVE | INACTIVE}]
[ENCRYPTION [=] {'Y' | 'N'}]
InnoDB and NDB:
[ENGINE [=] engine_name]
Reserved for future use:
[ENGINE_ATTRIBUTE [=] 'string']
このステートメントは、NDB
および InnoDB
テーブルスペースで使用されます。 これを使用して、新しいデータファイルを NDB
テーブルスペースに追加したり、NDB
テーブルスペースからデータファイルを削除できます。 また、「NDB Cluster ディスクデータ」テーブルスペースの名前変更、InnoDB
一般テーブルスペースの名前変更、InnoDB
一般テーブルスペースの暗号化、または InnoDB
undo テーブルスペースをアクティブまたは非アクティブとしてマークするためにも使用できます。
MySQL 8.0.14 で導入された UNDO
キーワードは、InnoDB
undo テーブルスペースをアクティブまたは非アクティブとしてマークするために SET {ACTIVE | INACTIVE}
句とともに使用されます。 詳細は、セクション15.6.3.4「undo テーブルスペース」を参照してください。
ADD DATAFILE
バリアントを使用すると、INITIAL_SIZE
句を使用して NDB
「ディスクデータ」テーブルスペースの初期サイズを指定できます。size
はバイト単位で測定され、デフォルト値は 134217728 (128 MB) です。 オプションで、my.cnf
で使用されているものと同様に、size
の後に一文字の略称を付けることもできます。 一般に、これは M
(M バイト) または G
(G バイト) のどちらかの文字です。
32 ビットシステム上では、INITIAL_SIZE
のサポートされる最大値は 4294967296 (4G バイト) です。 (Bug #29186)
INITIAL_SIZE
は、CREATE TABLESPACE
と同様に明示的に丸められます。
データファイルが作成されると、そのサイズは変更できませんが、追加の ALTER TABLESPACE ... ADD DATAFILE
ステートメントを使用して NDB テーブルスペースにデータファイルを追加できます。
ALTER TABLESPACE ... ADD DATAFILE
を ENGINE = NDB
とともに使用すると、各クラスタデータノードにデータファイルが作成されますが、INFORMATION_SCHEMA.FILES
テーブルには 1 つの行のみが生成されます。 詳細は、このテーブルおよび セクション23.5.10.1「NDB Cluster ディスクデータオブジェクト」 の説明を参照してください。 ADD DATAFILE
は、InnoDB
テーブルスペースではサポートされていません。
ALTER TABLESPACE
で DROP DATAFILE
を使用すると、NDB テーブルスペースからデータファイル'file_name
'が削除されます。 いずれかのテーブルが使用しているテーブルスペースからはデータファイルを削除できません。つまり、そのデータファイルが空である (エクステントが使用されていない) ことが必要です。 セクション23.5.10.1「NDB Cluster ディスクデータオブジェクト」を参照してください。 さらに、削除されるデータファイルはすべて、CREATE TABLESPACE
または ALTER TABLESPACE
で以前にそのテーブルスペースに追加されている必要があります。 DROP DATAFILE
は、InnoDB
テーブルスペースではサポートされていません。
WAIT
は解析されますが、それ以外は無視されます。 これは将来の拡張のために用意されています。
テーブルスペースで使用されるストレージエンジンを指定する ENGINE
句は非推奨になりました。将来のリリースで削除される予定です。 テーブルスペース記憶域エンジンはデータディクショナリによって認識されるため、ENGINE
句は廃止されています。 ストレージエンジンが指定されている場合は、データディクショナリに定義されているテーブルスペースストレージエンジンと一致する必要があります。 NDB
テーブルスペースと互換性のある engine_name
の値は、NDB
および NDBCLUSTER
のみです。
RENAME TO
操作は、autocommit
の設定に関係なく、autocommit
モードで暗黙的に実行されます。
テーブルスペースに存在するテーブルに対して LOCK TABLES
または FLUSH TABLES WITH READ LOCK
が有効になっている間は、RENAME TO
操作を実行できません。
排他的 metadata locks は、テーブルスペースの名前の変更中に一般的なテーブルスペースに存在するテーブルに対して取得されるため、同時 DDL が回避されます。 同時 DML がサポートされています。
InnoDB
一般テーブルスペースの名前を変更するには、CREATE TABLESPACE
権限が必要です。
AUTOEXTEND_SIZE
オプションは、一杯になったときに InnoDB
がテーブルスペースのサイズを拡張する量を定義します。 MySQL 8.0.23 で導入されました。 設定は 4MB の倍数である必要があります。 デフォルト設定は 0 で、暗黙的なデフォルト動作に従ってテーブルスペースが拡張されます。 詳細は、セクション15.6.3.9「テーブルスペースの AUTOEXTEND_SIZE 構成」を参照してください。
ENCRYPTION
句は、InnoDB
一般テーブルスペースまたは mysql
システムテーブルスペースのページレベルのデータ暗号化を有効または無効にします。 一般テーブルスペースの暗号化サポートは、MySQL 8.0.13 で導入されました。 mysql
システムテーブルスペースの暗号化サポートは、MySQL 8.0.16 で導入されました。
暗号化を有効にする前に、キーリングプラグインをインストールして構成する必要があります。
MySQL 8.0.16 では、table_encryption_privilege_check
変数が有効になっている場合、default_table_encryption
の設定とは異なる ENCRYPTION
句の設定を使用して一般的なテーブルスペースを変更するには、TABLE_ENCRYPTION_ADMIN
権限が必要です。
テーブルスペース内のいずれかのテーブルが DEFAULT ENCRYPTION='N'
で定義されたスキーマに属している場合、一般テーブルスペースの暗号化の有効化は失敗します。 同様に、一般テーブルスペースのいずれかのテーブルが DEFAULT ENCRYPTION='Y'
で定義されたスキーマに属している場合、暗号化の無効化は失敗します。 DEFAULT ENCRYPTION
スキーマオプションは、MySQL 8.0.16 で導入されました。
一般的なテーブルスペースで実行される ALTER TABLESPACE
ステートメントに ENCRYPTION
句が含まれていない場合、default_table_encryption
の設定に関係なく、テーブルスペースは現在の暗号化ステータスを保持します。
一般テーブルスペースまたは mysql
システムテーブルスペースが暗号化されると、テーブルスペースに存在するすべてのテーブルが暗号化されます。 同様に、暗号化されたテーブルスペースに作成されたテーブルも暗号化されます。
INPLACE
アルゴリズムは、一般テーブルスペースまたは mysql
システムテーブルスペースの ENCRYPTION
属性を変更するときに使用されます。 INPLACE
アルゴリズムでは、テーブルスペースに存在するテーブルに対する同時 DML が許可されます。 同時 DDL はブロックされます。
詳細は、セクション15.13「InnoDB 保存データ暗号化」を参照してください。
ENGINE_ATTRIBUTE
オプション (MySQL 8.0.21 の時点で使用可能) を使用して、プライマリストレージエンジンのテーブルスペース属性を指定します。 このオプションは、将来の使用のために予約されています。
許可される値は、有効な JSON
ドキュメントまたは空の文字列 ('') を含む文字列リテラルです。 無効な JSON
が拒否されました。
ALTER TABLESPACE ts1 ENGINE_ATTRIBUTE='{"key":"value"}';
ENGINE_ATTRIBUTE
の値は、エラーなしで繰り返すことができます。 この場合、最後に指定した値が使用されます。
ENGINE_ATTRIBUTE
値はサーバーによってチェックされず、テーブルストレージエンジンが変更されたときにもクリアされません。
JSON 属性値の個々の要素を変更することはできません。 追加または置換できるのは属性のみです。