MySQL 4.0
          より前は、テーブルのシンボリックリンクの実行を非常に慎重に行う必要がありました。シンボリックリンクが行われているテーブルで、ALTER
          TABLE、REPAIR
          TABLE、あるいは OPTIMIZE
          TABLE
          を実行する際に、シンボリックリンクが削除され、オリジナルファイルに置換されるという問題がありました。これらのステートメントは、データベースディレクトリにテンポラリファイルを作成し、ステートメントの操作が完了するとオリジナルファイルとテンポラリファイルの置換が行われる仕様であるため、この問題が発生しました。
        
          realpath()
          の呼び出しの機能が完全でないシステムではテーブルのシンボリックリンクを行わないでください(少なくとも、Linux
          と Solaris では realpath()
          がサポートされています)。
        
          MySQL 4.0 では MyISAM
          テーブルでのみシンボリックリンクが完全サポートされています。これ以外のテーブル型で上記のコマンドを使用すると、予想外の問題の発生の恐れがあります。
        
          MySQL 4.0
          でのシンボリックリンクの処理は、次のように機能します(ほとんどが
          MyISAM
          テーブルのみに適しています)。
        
データディレクトリには常にテーブル定義ファイル、データファイルおよびインデックスファイルがある。データファイルとインデックスファイルは、別の場所に移動し、データディレクトリ内でシンボリックリンクによって置換できる。定義ファイルはこれができない。
データファイルとインデックスファイルは、それぞれ独立して別のディレクトリにシンボリックリンクを作成できる。
              シンボリックリンクは、オペレーティングシステムレベル(mysqld
              が実行されていない場合)、または SQL で
              CREATE TABLE に DATA
              DIRECTORY および INDEX
              DIRECTORY
              オプションを指定して実行できる。 See
              項6.5.3. 「CREATE TABLE 構文」。
            
              myisamchk
              は、データファイルやインデックスファイルのシンボリックリンクを置き換えない。
              myisamchk
              はリンクで指し示されているファイルに直接作用する。テンポラリファイルはすべてデータファイルやインデックスファイルが配置されているのと同じディレクトリに作成される。
            
              シンボリックリンクを使用しているテーブルをドロップすると、シンボリックリンクとシンボリックリンクが指しているファイルの両方がドロップされる。このため、root
              として mysqld
              を実行すべきではなく、また、MySQL
              データベースディレクトリへの書き込みアクセスをユーザに許可するべきでもない。
            
              ALTER TABLE RENAME
              を使用してテーブルの名前を変更し、テーブルを他のデータベースに移動しない場合、データベースディレクトリのシンボリックリンクの名前が新しい名前に変更され、データファイルとインデックスファイルもそれに従って名前が変更される。
            
              ALTER TABLE RENAME
              を使用してテーブルを別のデータベースに移動すると、テーブルが別のデータベースディレクトリに移動され、それまであったシンボリックリンクとそれが指すファイルが削除される(新規テーブルのシンボリックリンクは作成されない)。
            
              シンボリックリンクを使用していない場合は、mysqld
              に --skip-symlink
              オプションを指定して使用し、確実に誰もデータディレクトリの外でファイルのドロップや名前の変更を行う
              mysqld
              を使用できないようにする。
            
サポートされていない事項
              ALTER TABLE では DATA
              DIRECTORY と INDEX DIRECTORY
              テーブルオプションが無視される。
            
              MySQL 4.0.15
              より前は、テーブルにシンボリックリンクがある場合、SHOW
              CREATE TABLE
              でレポートが行われない。これは、SHOW
              CREATE TABLE を使用して CREATE
              TABLE ステートメントを生成する
              mysqldump
              についても同様である。
            
              BACKUP TABLE と RESTORE
              TABLE
              ではシンボリックリンクが考慮されない。
            
              frm
              ファイルはシンボリックリンクにすることがまったくできない(前述のように、データファイルとインデックスファイルのみシンボリックリンクにできる)。
              これを実行した場合(シノニム作成など)、正しい結果が得られなくなる。
              MySQL データディレクトリにデータベース
              db1
              があり、このデータベースにはテーブル
              tbl1 が、db1
              ディレクトリには tbl1
              を指すシンボリックリンク
              tbl2 があるとする。
            
shell>cd /path/to/datadir/db1shell>ln -s tbl1.frm tbl2.frmshell>ln -s tbl1.MYD tbl2.MYDshell>ln -s tbl1.MYI tbl2.MYI
              あるスレッドで db1.tbl1
              が読み取られ、別のスレッドで
              db1.tbl2
              が更新されると、問題が発生する。クエリキャッシュが欺かれ(tbl1
              が更新されていないと判断され、最新でない結果が返される)、tbl2
              に対する ALTER
              コマンドもエラーになる。
            
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

