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

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

6.6.1.1. Unix 上のデータベースに対するシンボリックリンクの使用

Unix の場合、データベースのシンボリックリンクは、まず、空き領域のあるディスクにディレクトリを作成し、次に MySQL データベースディレクトリからそのディレクトリへのシンボリックリンクを作成します。

shell> mkdir /dr1/databases/test
shell> ln -s /dr1/databases/test /path/to/datadir

MySQL は、1 つのディレクトリに対して複数のデータベースをリンクさせることをサポートしていません。データベースディレクトリをシンボリックリンクに置換すると、複数のデータベースへシンボリックリンクを張らない限り、問題なく機能します。 仮に MySQL データディレクトリにデータベース db1がある場合に、db1を指すシンボリックリンク db2を作成するとします。

shell> cd /path/to/datadir
shell> 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)
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