MySQL 8.0 リファレンスマニュアル


13.1.21 CREATE TABLESPACE ステートメント

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 tbl_name TABLESPACE [=] tablespace_name を使用してテーブルスペースにテーブルを追加します。 詳細は、セクション15.6.3.3「一般テーブルスペース」を参照してください。

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 TABLESPACEENGINE [=] NDB とともに使用すると、各クラスタデータノードにテーブルスペースおよび関連するデータファイルが作成されます。 INFORMATION_SCHEMA.FILES テーブルをクエリーすることによって、データファイルが作成されたことを確認したり、それらに関する情報を取得したりできます。 (このセクションの後半の例を参照してください。)

(セクション26.15「INFORMATION_SCHEMA FILES テーブル」を参照してください。)

オプション

  • ADD DATAFILE: テーブルスペースデータファイルの名前を定義します。 このオプションは、NDB テーブルスペースを作成する場合は常に必要です。MySQL 8.0.14 以降の InnoDB の場合は、undo テーブルスペースを作成する場合にのみ必要です。 指定したパスを含む file_name は、一重引用符または二重引用符で囲む必要があります。 ファイル名 (ファイル拡張子をカウントしない) およびディレクトリ名は、少なくとも 1 バイトの長さにする必要があります。 長さゼロのファイル名およびディレクトリ名はサポートされていません。

    InnoDBNDB によるデータファイルの処理方法にはかなりの違いがあるため、次の説明では 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/TS という名前のディレクトリに作成されます。nodeid はデータノード 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_SIZEinnodb_page_size 値と等しい場合、テーブルスペースには、圧縮されていない行形式 (COMPACTREDUNDANT および 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 は、NDBInnoDB の両方のテーブルスペースをサポートしています。 このオプションが指定されていない場合、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)

idlname および fname カラムはすべてインデックス付けされているため、実際には mytabledob および joined カラムのみがディスクに格納されることに注意してください。

前述のように、CREATE TABLESPACEENGINE [=] 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 ディスクデータオブジェクト」を参照してください。


関連キーワード:  ステートメント, テーブル, スペース, CREATE, 作成, NDB, InnoDB, TABLE, TABLESPACE, データファイル