ここで説明するシンボリックリンクのサポートと、それを制御する --symbolic-links
オプションは非推奨になりました。これらは将来のバージョンの MySQL で削除される予定です。 また、このオプションはデフォルトで無効になっています。
シンボリックリンクは、MyISAM
テーブルに対してのみ完全にサポートされています。 ほかのストレージエンジンのテーブルで使用されているファイルの場合、シンボリックリンクを使用しようとすると、未知の問題が発生することがあります。 InnoDB
テーブルの場合は、代わりにセクション15.6.1.2「外部でのテーブルの作成」に説明する代替の技法を使用します。
完全に動作する realpath()
呼び出しがないシステムでは、テーブルのシンボリックリンクを作成しないでください。 (Linux と Solaris では realpath()
をサポートしています)。 システムでシンボリックリンクをサポートしているかどうかを判断するには、次のステートメントを使用して、have_symlink
システム変数の値をチェックします。
SHOW VARIABLES LIKE 'have_symlink';
MyISAM
テーブルのシンボリックリンクの処理は次のように機能します。
データディレクトリには、常にデータ (
.MYD
) ファイルとインデックス (.MYI
) ファイルがあります。 データファイルとインデックスファイルは、ほかの場所に移動し、データディレクトリ内でシンボリックリンクによって置き換えることができます。データファイルとインデックスファイルは、独立して別々のディレクトリへのシンボリックリンクを作成できます。
-
実行中の MySQL サーバーにシンボリックリンクの作成を実行するように指示するには、
CREATE TABLE
にDATA DIRECTORY
およびINDEX DIRECTORY
オプションを使用します。 セクション13.1.20「CREATE TABLE ステートメント」を参照してください。 または、mysqld が実行中でない場合は、コマンド行から ln -s を使用して、シンボリックリンクの作成を手動で実行できます。注記DATA DIRECTORY
およびINDEX DIRECTORY
オプションのいずれか、または両方で使用されるパスには、MySQLdata
ディレクトリを含めることができません。 (Bug #32167) myisamchk が、シンボリックリンクをデータファイルやインデックスファイルに置き換えません。 それは、シンボリックリンクが指しているファイルに対して直接作用します。 一時ファイルはすべてデータファイルやインデックスファイルが配置されているディレクトリに作成されます。 同じことが
ALTER TABLE
、OPTIMIZE TABLE
、およびREPAIR TABLE
ステートメントにも当てはまります。- 注記
シンボリックリンクを使用しているテーブルを削除すると、シンボリックリンクとシンボリックリンクが指しているファイルの両方が削除されます。 これは、mysqld を
root
オペレーティングシステムユーザーとして実行しないか、オペレーティングシステムユーザーに MySQL データベースディレクトリへの書込みアクセス権を付与しないことが非常によい理由です。 ALTER TABLE ... RENAME
またはRENAME TABLE
を使用してテーブルの名前を変更し、テーブルを別のデータベースに移動しない場合、データベースディレクトリのシンボリックリンクの名前が新しい名前に変更され、データファイルとインデックスファイルもそれに従って名前が変更されます。ALTER TABLE ... RENAME
またはRENAME TABLE
を使用してテーブルを別のデータベースに移動すると、テーブルが別のデータベースディレクトリに移動されます。 テーブル名が変更された場合、新しいデータベースディレクトリ内のシンボリックリンクの名前が新しい名前に変更され、データファイルとインデックスファイルもそれに従って名前が変更されます。シンボリックリンクを使用していない場合、
--skip-symbolic-links
オプションを付けて mysqld を起動し、だれも mysqld を使用して、データディレクトリ外のファイルを削除したり名前を変更したりできないようにします。
これらのテーブルシンボリックリンクの操作はサポートされていません。
ALTER TABLE
はDATA DIRECTORY
およびINDEX DIRECTORY
テーブルオプションを無視します。