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


MySQL 8.0 リファレンスマニュアル  /  ...  /  サーバーがオフラインのときのテーブルスペースファイルの移動

15.6.3.6 サーバーがオフラインのときのテーブルスペースファイルの移動

起動時にテーブルスペースファイルをスキャンするディレクトリを定義する innodb_directories オプションでは、サーバーがオフラインのときにテーブルスペースファイルを新しい場所に移動またはリストアできます。 起動時には、検出されたテーブルスペースファイルがデータディクショナリで参照されるファイルのかわりに使用され、再配置されたファイルを参照するようにデータディクショナリが更新されます。 スキャンによって重複するテーブルスペースファイルが検出された場合、起動は失敗し、同じテーブルスペース ID に対して複数のファイルが見つかったことを示すエラーが表示されます。

innodb_data_home_dirinnodb_undo_directory および datadir の構成オプションで定義されたディレクトリは、innodb_directories 引数値に自動的に追加されます。 これらのディレクトリは、innodb_directories オプションが明示的に指定されているかどうかに関係なく、起動時にスキャンされます。 これらのディレクトリを暗黙的に追加すると、innodb_directories 設定を構成せずに、システムテーブルスペースファイル、データディレクトリまたは undo テーブルスペースファイルを移動できます。 ただし、ディレクトリが変更された場合は設定を更新する必要があります。 たとえば、データディレクトリを再配置した後、サーバーを再起動する前に --datadir 設定を更新する必要があります。

innodb_directories オプションは、起動コマンドまたは MySQL オプションファイルで指定できます。 一部のコマンドインタプリタではセミコロン (;) は特殊文字として解釈されるため、引数値の前後に引用符が使用されます。 (たとえば UNIX シェルでは、これはコマンド終端記号として扱われます。)

起動コマンド:

mysqld --innodb-directories="directory_path_1;directory_path_2"

MySQL オプションファイル:

[mysqld]
innodb_directories="directory_path_1;directory_path_2"

次の手順は、個々の file-per-table および general tablespace ファイル、system tablespace ファイル、undo tablespace ファイルまたはデータディレクトリの移動に適用できます。 ファイルまたはディレクトリを移動する前に、次の使用上のノートを確認してください。

  1. サーバーを停止します。

  2. テーブルスペースファイルまたはディレクトリを移動します。

  3. 新しいディレクトリを InnoDB で認識できるようにします。

    • 個々の file-per-table または general tablespace ファイルを移動する場合は、innodb_directories 値に不明なディレクトリを追加します。

      • innodb_data_home_dirinnodb_undo_directory および datadir の構成オプションで定義されたディレクトリは、innodb_directories 引数値に自動的に追加されるため、これらを指定する必要はありません。

      • file-per-table テーブルスペースファイルは、スキーマと同じ名前のディレクトリにのみ移動できます。 たとえば、actor テーブルが sakila スキーマに属している場合、actor.ibd データファイルは sakila というディレクトリにのみ移動できます。

      • 一般テーブルスペースファイルは、データディレクトリまたはデータディレクトリのサブディレクトリに移動できません。

    • システムテーブルスペースファイル、undo テーブルスペースまたはデータディレクトリを移動する場合は、必要に応じて innodb_data_home_dirinnodb_undo_directory および datadir の設定を更新します。

  4. サーバーを再起動します。

使用上の注意
  • ワイルドカード式は、innodb_directories 引数値では使用できません。

  • innodb_directories スキャンは、指定されたディレクトリのサブディレクトリも走査します。 重複するディレクトリおよびサブディレクトリは、スキャンされるディレクトリのリストから破棄されます。

  • innodb_directories オプションでは、InnoDB テーブルスペースファイルの移動のみがサポートされます。 InnoDB 以外のストレージエンジンに属するファイルの移動はサポートされていません。 この制限は、データディレクトリ全体を移動する場合にも適用されます。

  • innodb_directories オプションでは、スキャンしたディレクトリにファイルを移動する際のテーブルスペースファイルの名前変更がサポートされています。 また、サポートされている他のオペレーティングシステムへのテーブルスペースファイルの移動もサポートしています。

  • テーブルスペースファイルを別のオペレーティングシステムに移動する場合は、宛先システムで禁止されている文字または特殊文字がテーブルスペースファイル名に含まれていないことを確認してください。

  • データディレクトリを Windows オペレーティングシステムから Linux オペレーティングシステムに移動する場合は、バイナリログインデックスファイルのバイナリログファイルパスを変更して、スラッシュではなくバックスラッシュを使用します。 デフォルトでは、バイナリログインデックスファイルのベース名はバイナリログファイルと同じで、拡張子は'.index'です。 バイナリログインデックスファイルの場所は、--log-bin によって定義されます。 デフォルトの場所はデータディレクトリです。

  • テーブルスペースファイルを別のオペレーティングシステムに移動すると、クロスプラットフォームのレプリケーションが導入されます。データベース管理者は、プラットフォーム固有のディレクトリを含む DDL ステートメントを適切にレプリケーションする必要があります。 ディレクトリの指定を許可するステートメントには、CREATE TABLE ... DATA DIRECTORY および CREATE TABLESPACE ... ADD DATAFILE があります。

  • 絶対パスを使用して、またはデータディレクトリ外の場所に作成された file-per-table および general テーブルスペースのディレクトリを innodb_directories 設定に追加します。 そうしないと、InnoDB はリカバリ中にファイルを検出できません。 関連情報については、クラッシュリカバリ中のテーブルスペースの検出を参照してください。

    テーブルスペースファイルの場所を表示するには、INFORMATION_SCHEMA.FILES テーブルをクエリーします:

    mysql> SELECT TABLESPACE_NAME, FILE_NAME FROM INFORMATION_SCHEMA.FILES \G

関連キーワード:  InnoDB, テーブル, スペース, ディレクトリ, 移動, 構成, directories, 圧縮, INFORMATION, SCHEMA