CREATE [UNDO] TABLESPACE tablespace_name
InnoDB and NDB:
[ADD DATAFILE 'file_name']
[AUTOEXTEND_SIZE [=] value]
InnoDB only:
[FILE_BLOCK_SIZE = value]
[ENCRYPTION [=] {'Y' | 'N'}]
NDB only:
USE LOGFILE GROUP logfile_group
[EXTENT_SIZE [=] extent_size]
[INITIAL_SIZE [=] initial_size]
[MAX_SIZE [=] max_size]
[NODEGROUP [=] nodegroup_id]
[WAIT]
[COMMENT [=] 'string']
InnoDB and NDB:
[ENGINE [=] engine_name]
Reserved for future use:
[ENGINE_ATTRIBUTE [=] 'string']
このステートメントは、テーブルスペースの作成に使用されます。 正確な構文とセマンティクスは、使用されるストレージエンジンによって異なります。 標準の MySQL リリースでは、これは常に InnoDB
テーブルスペースです。 MySQL NDB Cluster は、NDB
ストレージエンジンを使用したテーブルスペースもサポートしています。
InnoDB に関する考慮事項
CREATE TABLESPACE
構文は、一般的なテーブルスペースまたは undo テーブルスペースの作成に使用されます。 undo テーブルスペースを作成するには、MySQL 8.0.14 で導入された UNDO
キーワードを指定する必要があります。
一般的なテーブルスペースは共有テーブルスペースです。 複数のテーブルを保持でき、すべてのテーブルの行フォーマットをサポートします。 一般テーブルスペースは、データディレクトリに対して相対的または独立した場所に作成できます。
InnoDB
の一般テーブルスペースを作成した後、CREATE TABLE
または tbl_name
... TABLESPACE [=] tablespace_name
ALTER TABLE
を使用してテーブルスペースにテーブルを追加します。 詳細は、セクション15.6.3.3「一般テーブルスペース」を参照してください。
tbl_name
TABLESPACE [=] tablespace_name
undo テーブルスペースには undo ログが含まれます。 undo テーブルスペースは、完全修飾データファイルパスを指定することで、選択した場所に作成できます。 詳細は、セクション15.6.3.4「undo テーブルスペース」を参照してください。
NDB Cluster に関する考慮事項
このステートメントは、テーブルスペースを作成するために使用します。このテーブルスペースには、「NDB Cluster ディスクデータ」テーブルの記憶領域を提供するデータファイルを 1 つ以上含めることができます (セクション23.5.10「NDB Cluster ディスクデータテーブル」 を参照)。 このステートメントを使用して 1 つのデータファイルが作成され、テーブルスペースに追加されます。 ALTER TABLESPACE
ステートメントを使用して、テーブルスペースにデータファイルを追加できます (セクション13.1.10「ALTER TABLESPACE ステートメント」を参照してください)。
NDB Cluster ディスクデータオブジェクトはすべて同じ名前空間を共有します。 つまり、各ディスクデータオブジェクトは (単に、特定の型の各ディスクデータオブジェクトというだけでなく)、一意の名前が付けられている必要があります。 たとえば、テーブルスペースとログファイルグループを同じ名前にしたり、テーブルスペースとデータファイルを同じ名前にしたりすることはできません。
作成されるテーブルスペースには、USE LOGFILE GROUP
句を使用して、1 つ以上の UNDO
ログファイルのログファイルグループを割り当てる必要があります。logfile_group
は、CREATE LOGFILE GROUP
で作成された既存のログファイルグループである必要があります (セクション13.1.16「CREATE LOGFILE GROUP ステートメント」を参照してください)。 複数のテーブルスペースが UNDO
ロギングのために同じログファイルグループを使用できます。
EXTENT_SIZE
または INITIAL_SIZE
を設定する場合は、my.cnf
で使用されているものと同様に、数値の後に一文字の略称を付けることもできます。 一般に、これは M
(M バイト) または G
(G バイト) のどちらかの文字です。
INITIAL_SIZE
および EXTENT_SIZE
は、次のように丸められます:
EXTENT_SIZE
は、最も近い 32K の倍数に切り上げられます。INITIAL_SIZE
は、down を 32K の最も近い整数の倍数に丸めます。この結果は、EXTENT_SIZE
の最も近い整数の倍数に切り上げられます (丸め後)。
NDB
は、データノードの再起動操作のためにテーブルスペースの 4% を予約します。 この予約済領域は、データ記憶域には使用できません。
今説明した丸めは明示的に実行され、このような丸めのいずれかが実行された場合は MySQL Server によって警告が発行されます。 丸められた値はまた、INFORMATION_SCHEMA.FILES
カラム値の計算やその他の目的のために、NDB カーネルでも使用されます。 ただし、予期しない結果が発生しないようにするために、これらのオプションの指定では常に 32K の整数倍を使用することをお勧めします。
CREATE TABLESPACE
を ENGINE [=] NDB
とともに使用すると、各クラスタデータノードにテーブルスペースおよび関連するデータファイルが作成されます。 INFORMATION_SCHEMA.FILES
テーブルをクエリーすることによって、データファイルが作成されたことを確認したり、それらに関する情報を取得したりできます。 (このセクションの後半の例を参照してください。)
(セクション26.15「INFORMATION_SCHEMA FILES テーブル」を参照してください。)
オプション
-
ADD DATAFILE
: テーブルスペースデータファイルの名前を定義します。 このオプションは、NDB
テーブルスペースを作成する場合は常に必要です。MySQL 8.0.14 以降のInnoDB
の場合は、undo テーブルスペースを作成する場合にのみ必要です。 指定したパスを含む
は、一重引用符または二重引用符で囲む必要があります。 ファイル名 (ファイル拡張子をカウントしない) およびディレクトリ名は、少なくとも 1 バイトの長さにする必要があります。 長さゼロのファイル名およびディレクトリ名はサポートされていません。file_name
InnoDB
とNDB
によるデータファイルの処理方法にはかなりの違いがあるため、次の説明では 2 つのストレージエンジンについて個別に説明します。InnoDB データファイル.
InnoDB
テーブルスペースでは単一のデータファイルのみがサポートされ、その名前には.ibd
拡張子が含まれている必要があります。InnoDB
一般テーブルスペースデータファイルをデータディレクトリ外の場所に配置するには、データディレクトリに対する完全修飾パスまたは相対パスを含めます。 undo テーブルスペースには、完全修飾パスのみが許可されます。 パスを指定しない場合、データディレクトリに一般テーブルスペースが作成されます。 パスを指定せずに作成された undo テーブルスペースは、innodb_undo_directory
変数で定義されたディレクトリに作成されます。innodb_undo_directory
変数が定義されていない場合、undo テーブルスペースはデータディレクトリに作成されます。暗黙的に作成された file-per-table テーブルスペースとの競合を回避するために、データディレクトリの下のサブディレクトリに
InnoDB
一般テーブルスペースを作成することはサポートされていません。 データディレクトリ外に一般的なテーブルスペースまたは undo テーブルスペースを作成する場合、そのディレクトリが存在し、テーブルスペースを作成する前にInnoDB
で認識されている必要があります。 ディレクトリをInnoDB
で認識できるようにするには、innodb_directories
値またはinnodb_directories
値に値が追加される変数のいずれかにディレクトリを追加します。innodb_directories
は読取り専用変数です。 構成するには、サーバーを再起動する必要があります。InnoDB
テーブルスペースの作成時にADD DATAFILE
句が指定されていない場合、一意のファイル名を持つテーブルスペースデータファイルが暗黙的に作成されます。 一意のファイル名は、ダッシュ (aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
) で区切られた 16 進数の 5 つのグループにフォーマットされた 128 ビット UUID です。 ストレージエンジンで必要な場合は、ファイル拡張子が追加されます。.ibd
ファイル拡張子がInnoDB
一般テーブルスペースデータファイルに追加されます。 レプリケーション環境では、レプリケーションソースサーバーに作成されたデータファイル名は、レプリカに作成されたデータファイル名と同じではありません。MySQL 8.0.17 では、
InnoDB
テーブルスペースの作成時にADD DATAFILE
句で循環ディレクトリ参照は許可されません。 たとえば、次のステートメントの循環ディレクトリ参照 (/../
) は使用できません:CREATE TABLESPACE ts1 ADD DATAFILE ts1.ibd 'any_directory/../ts1.ibd';
この制限の例外は Linux に存在し、前述のディレクトリがシンボリックリンクの場合は循環ディレクトリ参照が許可されます。 たとえば、
any_directory
がシンボリックリンクの場合、前述の例のデータファイルパスは許可されます。 (データファイルパスを'../
'で始めることはできます。)NDB データファイル.
NDB
テーブルスペースでは、任意の有効なファイル名を持つことができる複数のデータファイルがサポートされています。ALTER TABLESPACE
ステートメントを使用して、作成後に「NDB Cluster」テーブルスペースにデータファイルを追加できます。NDB
テーブルスペースデータファイルは、デフォルトでデータノードファイルシステムディレクトリ、つまりデータノードデータディレクトリ (DataDir
) の下のndb_
という名前のディレクトリに作成されます。nodeid
_fs/TSnodeid
はデータノードNodeId
です。 データファイルをデフォルト以外の場所に配置するには、絶対ディレクトリパスまたはデフォルトの場所に対する相対パスを含めます。 指定されたディレクトリが存在しない場合、NDB
はそれを作成しようとします。そのためには、データノードプロセスが実行されているシステムユーザーアカウントに適切なアクセス権が必要です。注記データファイルに使用されるパスを決定する際、
NDB
は~
(チルダ) 文字を拡張しません。複数のデータノードが同じ物理ホスト上で実行されている場合は、次の考慮事項が適用されます:
データファイルの作成時に絶対パスを指定することはできません。
各データノードに個別のデータディレクトリがないかぎり、データノードファイルシステムのディレクトリ外にテーブルスペースデータファイルを作成することはできません。
各データノードに独自のデータディレクトリがある場合は、このディレクトリ内の任意の場所にデータファイルを作成できます。
各データノードに独自のデータディレクトリがある場合は、そのホスト上で実行されている各データノードのホストファイルシステム上の一意の場所に解決されるかぎり、相対パスを使用してノードデータディレクトリ外にデータファイルを作成することもできます。
-
FILE_BLOCK_SIZE
: このオプションはInnoDB
の一般的なテーブルスペースに固有で、NDB
によって無視され、テーブルスペースデータファイルのブロックサイズが定義されます。 値はバイト単位または KB 単位で指定できます。 たとえば、8K バイトのファイルブロックサイズは 8192 または 8K と指定できます。 このオプションを指定しない場合、FILE_BLOCK_SIZE
はデフォルトでinnodb_page_size
値に設定されます。FILE_BLOCK_SIZE
は、圧縮されたInnoDB
テーブル (ROW_FORMAT=COMPRESSED
) の格納にテーブルスペースを使用する場合に必要です。 この場合、テーブルスペースの作成時にテーブルスペースFILE_BLOCK_SIZE
を定義する必要があります。FILE_BLOCK_SIZE
がinnodb_page_size
値と等しい場合、テーブルスペースには、圧縮されていない行形式 (COMPACT
、REDUNDANT
およびDYNAMIC
) を持つテーブルのみを含めることができます。COMPRESSED
行形式のテーブルの物理ページサイズは、圧縮されていないテーブルとは異なります。 したがって、圧縮されたテーブルは、圧縮されていないテーブルと同じテーブルスペースに共存できません。一般的なテーブルスペースに圧縮テーブルを含めるには、
FILE_BLOCK_SIZE
を指定する必要があり、FILE_BLOCK_SIZE
値はinnodb_page_size
値との関連で有効な圧縮ページサイズである必要があります。 また、圧縮テーブル (KEY_BLOCK_SIZE
) の物理ページサイズはFILE_BLOCK_SIZE/1024
と同じである必要があります。 たとえば、innodb_page_size=16K
およびFILE_BLOCK_SIZE=8K
の場合、テーブルのKEY_BLOCK_SIZE
は 8 である必要があります。 詳細は、セクション15.6.3.3「一般テーブルスペース」を参照してください。 USE LOGFILE GROUP
:NDB
に必要です。これは、CREATE LOGFILE GROUP
を使用して以前に作成されたログファイルグループの名前です。InnoDB
ではサポートされていません。エラーで失敗します。-
EXTENT_SIZE
: このオプションは NDB に固有であり、エラーで失敗する InnoDB ではサポートされていません。EXTENT_SIZE
では、テーブルスペースに属するすべてのファイルで使用されるエクステントのサイズがバイト単位で設定されます。 デフォルト値は 1M です。 最小サイズは 32K であり、理論的な最大サイズは 2G です。ただし、実際的な最大サイズはいくつかの要因によって異なります。 ほとんどの場合は、エクステントサイズを変更してもパフォーマンスに測定可能な影響を与えることはないため、特別な状況を除き、常にデフォルト値を使用することをお勧めします。エクステントは、ディスク領域の割り当ての単位です。 1 つのエクステントが、そのエクステントに収容できる量のデータでいっぱいになってから、別のエクステントが使用されます。 理論上は、データファイルあたり最大 65,535 (64K) 個のエクステントを使用できます。ただし、推奨される最大数は 32,768 (32K) です。 1 つのデータファイルの推奨される最大サイズは 32G (つまり、32K 個のエクステント × エクステントあたり 1M バイト) です。 さらに、エクステントを特定のパーティションに割り当てたあと、そのエクステントを使用して別のパーティションのデータを格納することはできません。エクステントには、複数のパーティションのデータを格納できません。 これは、たとえば、
INITIAL_SIZE
(次の項目を参照) が 256 MB で、EXTENT_SIZE
が 128M の単一のデータファイルを持つテーブルスペースにはエクステントが 2 つしかないため、最大 2 つの異なるディスクデータテーブルパーティションのデータを格納するために使用できることを意味します。INFORMATION_SCHEMA.FILES
テーブルをクエリーすることによって、特定のデータファイルに未使用のまま残っているエクステントの数を確認できるため、ファイル内の空き容量の概算値を導き出すことができます。 それ以上の説明および例については、セクション26.15「INFORMATION_SCHEMA FILES テーブル」を参照してください。 -
INITIAL_SIZE
: このオプションはNDB
に固有であり、InnoDB
ではサポートされていません。エラーが発生して失敗します。INITIAL_SIZE
パラメータは、ADD DATATFILE
を使用して特定されたデータファイルの合計サイズをバイト単位で設定します。 このファイルが作成されると、そのサイズは変更できませんが、ALTER TABLESPACE ... ADD DATAFILE
を使用してテーブルスペースにデータファイルを追加できます。INITIAL_SIZE
はオプションです。そのデフォルト値は 134217728 (128M バイト) です。32 ビットシステム上では、
INITIAL_SIZE
のサポートされる最大値は 4294967296 (4G バイト) です。 -
AUTOEXTEND_SIZE
: MySQL 8.0.23 より前の MySQL では無視されます。MySQL 8.0.23 から、テーブルスペースが一杯になったときにInnoDB
がテーブルスペースのサイズを拡張する量を定義します。 設定は 4MB の倍数である必要があります。 デフォルト設定は 0 で、暗黙的なデフォルト動作に従ってテーブルスペースが拡張されます。 詳細は、セクション15.6.3.9「テーブルスペースの AUTOEXTEND_SIZE 構成」を参照してください。使用しているストレージエンジンに関係なく、MySQL NDB Cluster 8.0 のどのリリースにも影響はありません。
MAX_SIZE
: 現在、MySQL では無視されます。将来の使用のために予約されています。 使用されているストレージエンジンに関係なく、MySQL 8.0 または MySQL NDB Cluster 8.0 のどのリリースにも影響しません。NODEGROUP
: 現在、MySQL では無視されます。将来の使用のために予約されています。 使用されているストレージエンジンに関係なく、MySQL 8.0 または MySQL NDB Cluster 8.0 のどのリリースにも影響しません。WAIT
: 現在、MySQL では無視されます。将来の使用のために予約されています。 使用されているストレージエンジンに関係なく、MySQL 8.0 または MySQL NDB Cluster 8.0 のどのリリースにも影響しません。COMMENT
: 現在、MySQL では無視されます。将来の使用のために予約されています。 使用されているストレージエンジンに関係なく、MySQL 8.0 または MySQL NDB Cluster 8.0 のどのリリースにも影響しません。-
ENCRYPTION
句は、InnoDB
一般テーブルスペースのページレベルのデータ暗号化を有効または無効にします。 一般テーブルスペースの暗号化サポートは、MySQL 8.0.13 で導入されました。MySQL 8.0.16 では、
ENCRYPTION
句が指定されていない場合、default_table_encryption
設定によって暗号化を有効にするかどうかが制御されます。ENCRYPTION
句は、default_table_encryption
設定をオーバーライドします。 ただし、table_encryption_privilege_check
変数が有効になっている場合、default_table_encryption
設定とは異なるENCRYPTION
句設定を使用するには、TABLE_ENCRYPTION_ADMIN
権限が必要です。暗号化対応のテーブルスペースを作成する前に、キープラグインをインストールして構成する必要があります。
一般的なテーブルスペースが暗号化されると、テーブルスペースに存在するすべてのテーブルが暗号化されます。 同様に、暗号化されたテーブルスペースに作成されたテーブルも暗号化されます。
詳細は、セクション15.13「InnoDB 保存データ暗号化」を参照してください
ENGINE
: テーブルスペースを使用するストレージエンジンを定義します。ここで、engine_name
はストレージエンジンの名前です。 現在、標準の MySQL 8.0 リリースでは、InnoDB
ストレージエンジンのみがサポートされています。 MySQL NDB Cluster は、NDB
とInnoDB
の両方のテーブルスペースをサポートしています。 このオプションが指定されていない場合、default_storage_engine
システム変数の値がENGINE
に使用されます。-
ENGINE_ATTRIBUTE
オプション (MySQL 8.0.21 の時点で使用可能) を使用して、プライマリストレージエンジンのテーブルスペース属性を指定します。 このオプションは、将来の使用のために予約されています。許可される値は、有効な
JSON
ドキュメントまたは空の文字列 ('') を含む文字列リテラルです。 無効なJSON
が拒否されました。CREATE TABLESPACE ts1 ENGINE_ATTRIBUTE='{"key":"value"}';
ENGINE_ATTRIBUTE
の値は、エラーなしで繰り返すことができます。 この場合、最後に指定した値が使用されます。ENGINE_ATTRIBUTE
値はサーバーによってチェックされず、テーブルストレージエンジンが変更されたときにもクリアされません。
メモ
MySQL テーブルスペースのネーミングに関するルールは、セクション9.2「スキーマオブジェクト名」 を参照してください。 この接頭辞はシステムで使用するために予約されているため、これらのルールに加えて、スラッシュ文字 (「/」) も使用できず、
innodb_
で始まる名前も使用できません。一時一般テーブルスペースの作成はサポートされていません。
一般テーブルスペースでは、一時テーブルはサポートされていません。
TABLESPACE
オプションをCREATE TABLE
またはALTER TABLE
とともに使用して、InnoDB
テーブルパーティションまたはサブパーティションを file-per-table テーブルスペースに割り当てることができます。 すべてのパーティションは同じストレージエンジンに属している必要があります。 共有InnoDB
テーブルスペースへのテーブルパーティションの割当てはサポートされていません。 共有テーブルスペースには、InnoDB
システムテーブルスペースおよび一般テーブルスペースが含まれます。一般テーブルスペースでは、
CREATE TABLE ... TABLESPACE
を使用した行形式のテーブルの追加がサポートされています。innodb_file_per_table
を有効にする必要はありません。innodb_strict_mode
は、一般的なテーブルスペースには適用できません。 テーブルスペース管理ルールは、innodb_strict_mode
とは無関係に厳密に適用されます。CREATE TABLESPACE
パラメータが正しくないか、互換性がない場合、innodb_strict_mode
の設定に関係なく操作は失敗します。CREATE TABLE ... TABLESPACE
またはALTER TABLE ... TABLESPACE
を使用してテーブルを一般テーブルスペースに追加すると、innodb_strict_mode
は無視されますが、このステートメントはinnodb_strict_mode
が有効になっているかのように評価されます。DROP TABLESPACE
を使用して、テーブルスペースを削除します。 テーブルスペースを削除する前に、DROP TABLE
を使用してテーブルスペースからすべてのテーブルを削除する必要があります。 「NDB Cluster」テーブルスペースを削除する前に、1 つ以上のALTER TABLESPACE ... DROP DATATFILE
ステートメントを使用してすべてのデータファイルを削除する必要もあります。 セクション23.5.10.1「NDB Cluster ディスクデータオブジェクト」を参照してください。-
InnoDB
一般テーブルスペースに追加されたInnoDB
テーブルのすべての部分は、インデックスやBLOB
ページなどの一般テーブルスペースに存在します。テーブルスペースに割り当てられた
NDB
テーブルの場合、インデックス付けされていないカラムのみがディスクに格納され、実際にはテーブルスペースデータファイルが使用されます。 すべてのNDB
テーブルのインデックスおよびインデックス付けされたカラムは、常にメモリーに保持されます。 システムテーブルスペースと同様に、一般テーブルスペースに格納されているテーブルの切捨てまたは削除によって、新しい
InnoDB
データにのみ使用できる空き領域が一般テーブルスペース .ibd data file に内部的に作成されます。 file-per-table テーブルスペース用であるため、領域はオペレーティングシステムに解放されません。一般テーブルスペースは、どのデータベースまたはスキーマにも関連付けられていません。
ALTER TABLE ... DISCARD TABLESPACE
およびALTER TABLE ...IMPORT TABLESPACE
は、一般テーブルスペースに属するテーブルではサポートされていません。サーバーは、一般的なテーブルスペースを参照する DDL に対してテーブルスペースレベルのメタデータロックを使用します。 比較すると、サーバーは file-per-table テーブルスペースを参照する DDL に対してテーブルレベルのメタデータロックを使用します。
生成されたテーブルスペースまたは既存のテーブルスペースを一般テーブルスペースに変更することはできません。
一般的なテーブルスペース名と file-per-table テーブルスペース名の間に競合はありません。 file-per-table テーブルスペース名に存在する「/」文字は、一般的なテーブルスペース名では使用できません。
mysqldump および mysqlpump は、
InnoDB
CREATE TABLESPACE
ステートメントをダンプしません。
InnoDB の例
この例では、一般的なテーブルスペースを作成し、異なる行形式の 3 つの非圧縮テーブルを追加する方法を示します。
mysql> CREATE TABLESPACE `ts1` ADD DATAFILE 'ts1.ibd' ENGINE=INNODB;
mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY) TABLESPACE ts1 ROW_FORMAT=REDUNDANT;
mysql> CREATE TABLE t2 (c1 INT PRIMARY KEY) TABLESPACE ts1 ROW_FORMAT=COMPACT;
mysql> CREATE TABLE t3 (c1 INT PRIMARY KEY) TABLESPACE ts1 ROW_FORMAT=DYNAMIC;
この例では、一般的なテーブルスペースを作成し、圧縮テーブルを追加する方法を示します。 この例では、デフォルトの innodb_page_size
値が 16K であると想定しています。 8192 の FILE_BLOCK_SIZE
では、圧縮テーブルの KEY_BLOCK_SIZE
が 8 である必要があります。
mysql> CREATE TABLESPACE `ts2` ADD DATAFILE 'ts2.ibd' FILE_BLOCK_SIZE = 8192 Engine=InnoDB;
mysql> CREATE TABLE t4 (c1 INT PRIMARY KEY) TABLESPACE ts2 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
この例では、MySQL 8.0.14 の時点でオプションの ADD DATAFILE
句を指定せずに一般的なテーブルスペースを作成する方法を示します。
mysql> CREATE TABLESPACE `ts3` ENGINE=INNODB;
この例では、undo テーブルスペースの作成方法を示します。
mysql> CREATE UNDO TABLESPACE undo_003 ADD DATAFILE 'undo_003.ibu';
NDB の例
mydata-1.dat
という名前のデータファイルを使用して、myts
という名前の「NDB Cluster ディスクデータ」テーブルスペースを作成するとします。 NDB
テーブルスペースでは、常に 1 つ以上の undo ログファイルで構成されるログファイルグループを使用する必要があります。 この例では、まず、次に示す CREATE LOGFILE GROUP
ステートメントを使用して、myundo-1.dat
という名前の undo ログファイルを含む mylg
という名前のログファイルグループを作成します:
mysql> CREATE LOGFILE GROUP myg1
-> ADD UNDOFILE 'myundo-1.dat'
-> ENGINE=NDB;
Query OK, 0 rows affected (3.29 sec)
これで、次のステートメントを使用して、前述のテーブルスペースを作成できます:
mysql> CREATE TABLESPACE myts
-> ADD DATAFILE 'mydata-1.dat'
-> USE LOGFILE GROUP mylg
-> ENGINE=NDB;
Query OK, 0 rows affected (2.98 sec)
次に示すように、TABLESPACE
および STORAGE DISK
オプションを指定した CREATE TABLE
ステートメントを使用して、「ディスクデータ」テーブルを作成できるようになりました:
mysql> CREATE TABLE mytable (
-> id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> lname VARCHAR(50) NOT NULL,
-> fname VARCHAR(50) NOT NULL,
-> dob DATE NOT NULL,
-> joined DATE NOT NULL,
-> INDEX(last_name, first_name)
-> )
-> TABLESPACE myts STORAGE DISK
-> ENGINE=NDB;
Query OK, 0 rows affected (1.41 sec)
id
、lname
および fname
カラムはすべてインデックス付けされているため、実際には mytable
の dob
および joined
カラムのみがディスクに格納されることに注意してください。
前述のように、CREATE TABLESPACE
を ENGINE [=] NDB
とともに使用すると、テーブルスペースおよび関連するデータファイルが NDB Cluster データノードごとに作成されます。 次に示すように、INFORMATION_SCHEMA.FILES
テーブルをクエリーして、データファイルが作成されたことを確認し、その情報を取得できます:
mysql> SELECT FILE_NAME, FILE_TYPE, LOGFILE_GROUP_NAME, STATUS, EXTRA
-> FROM INFORMATION_SCHEMA.FILES
-> WHERE TABLESPACE_NAME = 'myts';
+--------------+------------+--------------------+--------+----------------+
| file_name | file_type | logfile_group_name | status | extra |
+--------------+------------+--------------------+--------+----------------+
| mydata-1.dat | DATAFILE | mylg | NORMAL | CLUSTER_NODE=5 |
| mydata-1.dat | DATAFILE | mylg | NORMAL | CLUSTER_NODE=6 |
| NULL | TABLESPACE | mylg | NORMAL | NULL |
+--------------+------------+--------------------+--------+----------------+
3 rows in set (0.01 sec)
追加情報および例については、セクション23.5.10.1「NDB Cluster ディスクデータオブジェクト」を参照してください。