Unix の場合、データベースのシンボリックリンクは、まず、空き領域のあるディスクにディレクトリを作成し、次に MySQL データベースディレクトリからそのディレクトリへのシンボリックリンクを作成します。
shell>mkdir /dr1/databases/test
shell>ln -s /dr1/databases/test
/path/to/datadir
MySQL は、1
つのディレクトリに対して複数のデータベースをリンクさせることをサポートしていません。データベースディレクトリをシンボリックリンクに置換すると、複数のデータベースへシンボリックリンクを張らない限り、問題なく機能します。
仮に MySQL データディレクトリにデータベース
db1
がある場合に、db1
を指すシンボリックリンク
db2
を作成するとします。
shell>cd
shell>/path/to/datadir
ln -s db1 db2
これで、db1
のテーブル
tbl_a
が、db2 のテーブル tbl_a
としても表示されます。あるスレッドで
db1.tbl_a が更新され、他のクライアントが
db2.tbl_a
に更新すると、問題が発生します。
ただし、実際にこれを実行しなければいけないとき、ソースファイルであるmysys/my_symlink.c
を変更することで可能となります。その場合、以下のステートメントを参照してください。
if (!(MyFlags & MY_RESOLVE_LINK) || (!lstat(filename,&stat_buff) && S_ISLNK(stat_buff.st_mode)))
このステートメントを以下に変えます。
if (1)