起動時にテーブルスペースファイルをスキャンするディレクトリを定義する innodb_directories
オプションでは、サーバーがオフラインのときにテーブルスペースファイルを新しい場所に移動またはリストアできます。 起動時には、検出されたテーブルスペースファイルがデータディクショナリで参照されるファイルのかわりに使用され、再配置されたファイルを参照するようにデータディクショナリが更新されます。 スキャンによって重複するテーブルスペースファイルが検出された場合、起動は失敗し、同じテーブルスペース ID に対して複数のファイルが見つかったことを示すエラーが表示されます。
innodb_data_home_dir
、innodb_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 ファイルまたはデータディレクトリの移動に適用できます。 ファイルまたはディレクトリを移動する前に、次の使用上のノートを確認してください。
サーバーを停止します。
テーブルスペースファイルまたはディレクトリを移動します。
-
新しいディレクトリを
InnoDB
で認識できるようにします。-
個々の file-per-table または general tablespace ファイルを移動する場合は、
innodb_directories
値に不明なディレクトリを追加します。innodb_data_home_dir
、innodb_undo_directory
およびdatadir
の構成オプションで定義されたディレクトリは、innodb_directories
引数値に自動的に追加されるため、これらを指定する必要はありません。file-per-table テーブルスペースファイルは、スキーマと同じ名前のディレクトリにのみ移動できます。 たとえば、
actor
テーブルがsakila
スキーマに属している場合、actor.ibd
データファイルはsakila
というディレクトリにのみ移動できます。一般テーブルスペースファイルは、データディレクトリまたはデータディレクトリのサブディレクトリに移動できません。
システムテーブルスペースファイル、undo テーブルスペースまたはデータディレクトリを移動する場合は、必要に応じて
innodb_data_home_dir
、innodb_undo_directory
およびdatadir
の設定を更新します。
-
サーバーを再起動します。
使用上の注意
ワイルドカード式は、
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