MySQL 5.1 リファレンスマニュアル :: 6 最適化 :: 6.6 ディスク関連の問題 :: 6.6.1 シンボリックリンクの使用 :: 6.6.1.2 Unix 上のテーブルに対するシンボリックリンクの使用
« 6.6.1.1 Unix 上のデータベースに対するシンボリックリンクの使用

6.6.1.3 上のデータベースに対するシンボリックリンクの使用 »
Section Navigation      [Toggle]
  • 6.6.1 シンボリックリンクの使用
  • 6.6.1.1 Unix 上のデータベースに対するシンボリックリンクの使用
  • 6.6.1.2 Unix 上のテーブルに対するシンボリックリンクの使用
  • 6.6.1.3 上のデータベースに対するシンボリックリンクの使用

6.6.1.2. Unix 上のテーブルに対するシンボリックリンクの使用

realpath()の呼び出しの機能が完全でないシステムではテーブルのシンボリックリンクを行わないでください。(少なくとも、Linux と Solaris では realpath()がサポートされています)。 SHOW VARIABLES LIKE 'have_symlink'ステートメントを発行することで、ユーザのシステムがシンボリックリンクをサポートするかチェックできます。.

MySQL 4.0 では MyISAMテーブルでのみシンボリックリンクが完全サポートされています。 これ以外のテーブル型で上記のコマンドを使用すると、予想外の問題の発生の恐れがあります。

MySQL 4.0 でのMyISAMテーブルのシンボリックリンクの処理は次のように機能します。

  • データディレクトリには常にテーブル定義ファイル(.frm) 、データファイル(.MYD) およびインデックスファイル(.MYI) がある。データファイルとインデックスファイルは、別の場所に移動し、データディレクトリ内でシンボリックリンクによって置換できる。定義ファイルはこれができない。

  • データファイルとインデックスファイルは、それぞれ独立して別のディレクトリにシンボリックリンクを作成できる。

  • シンボリックリンクは、オペレーティングシステムレベル(mysqld が実行されていない場合)、または SQL で CREATE TABLEに DATA DIRECTORYおよび INDEX DIRECTORYオプションを指定して実行できる。 詳しくは項12.1.8. 「CREATE TABLE 構文」を参照してください。あるいは、シンボリックリンクはln -sを使用してコマンドラインから手動で行えますが、 これはmysqldが作動していない場合に限ります。

  • myisamchkは、データファイルやインデックスファイルのシンボリックリンクを置き換えない。myisamchk はリンクで指し示されているファイルに直接作用する。テンポラリファイルはすべてデータファイルやインデックスファイルが配置されているのと同じディレクトリに作成されます。 同様のことがALTER TABLE、OPTIMIZE TABLE、そしてREPAIR TABLEステートメントでいえます。

  • 注:シンボリックリンクを使用しているテーブルをドロップすると、シンボリックリンクとシンボリックリンクが指しているファイルの両方がドロップされる。このため、rootとして mysqldを実行すべきではなく、また、MySQL データベースディレクトリへの書き込みアクセスをユーザに許可するべきでもない。

  • ALTER TABLE ... RENAMEを使用してテーブルの名前を変更し、テーブルを他のデータベースに移動しない場合、データベースディレクトリのシンボリックリンクの名前が新しい名前に変更され、データファイルとインデックスファイルもそれに従って名前が変更される。

  • ALTER TABLE ... RENAMEを使用してテーブルを別のデータベースに移動すると、テーブルが別のデータベースディレクトリに移動され、それまであったシンボリックリンクとそれが指すファイルが削除される(新規テーブルのシンボリックリンクは作成されない)。

  • シンボリックリンクを使用していない場合は、mysqldに --skip-symbolic-linksオプションを指定して使用し、確実に誰もデータディレクトリの外でファイルのドロップや名前の変更を行う mysqldを使用できないようにする。

サポートされていないテーブルシンボリックリンクオペレーション

  • ALTER TABLEでは DATA DIRECTORYと INDEX DIRECTORY テーブルオプションが無視される。

  • BACKUP TABLEとRESTORE TABLEではシンボリックリンクが考慮されない。

  • .frmファイルはシンボリックリンクにすることがまったくできない(前述のように、データファイルとインデックスファイルのみシンボリックリンクにできる)。 これを実行した場合(シノニム作成など)、正しい結果が得られなくなる。 MySQL データディレクトリにデータベース db1があり、このデータベースにはテーブル tbl1が、db1ディレクトリには tbl1を指すシンボリックリンク tbl2があるとする。

    shell> cd /path/to/datadir/db1
    shell> ln -s tbl1.frm tbl2.frm
    shell> ln -s tbl1.MYD tbl2.MYD
    shell> ln -s tbl1.MYI tbl2.MYI
    

    あるスレッドで db1.tbl1が読み取られ、別のスレッドで db1.tbl2が更新されると、問題が発生する。

    • クエリキャッシュが「欺かれ」(tbl1が更新されていないと判断され、最新でない結果が返される)。

    • tbl2に対するALTERステートメントもエラーになる。

Copyright © 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates