2009-08-19 17 views
15

私はMySQLのデータベースのエイリアスを探す方法を探しています。その理由は、システムを停止させることなく、稼働中の本番データベースの名前を変更できるようにするためです。私はデータベースを新しい名前にエイリアスすることができ、私の余暇でそれに接続するコードを変更して展開し、最終的に古いエイリアスを削除することができます。MySQLでデータベースのエイリアスを設定するにはどうすればよいですか?

これを達成するためのより良い方法があれば教えてください。

+0

DBIのプロキシ機能は、使用のものであってもよい – jrockway

+0

あなたは、私はPHPアプリをサポートしています学ぶためにぞっとします@jrockway。 – Schwern

答えて

7

https://dev.mysql.com/doc/refman/5.7/en/symbolic-links-to-databases.html

MySQLは複数のデータベースにディレクトリを1つのリンクをサポートしていませんと言います。

シンボリックリンクを使用して、データベースディレクトリを、たとえばdatadir以外の場所にリンクすることができます。

$ cd /var/lib/mysql 
$ ln -s /other/dir/mydatabase . 

しかし、あなたは別のMySQLデータベース用のデータベース・ディレクトリ「エイリアス」を作るためにシンボリックリンクを使用することはできません。

$ cd /var/lib/mysql 
$ ln -s `pwd`/mydatabase1 mydatabase2 # WRONG 

理由があるInnoDBは、独自の内部データベース名および他のメタデータを保持していることデータ・ディクショナリ。表領域ファイルに格納されます。あなたがそれを混乱させると、あなたが望むものを得ることができません。

MySQLにはデータベースのエイリアシングに関するDDL構文がありません。

+0

私はそれを決して考えなかったでしょう!あなたは(もちろん、*あなた*、ビル)ではなく、データベースは単なるファイルであることを忘れています。 – nickf

+0

ありがとう!私はそれを考慮しましたが、安全かどうかは分かりませんでした。 – Schwern

+0

私はAmazonのデータベースサーバのファイルシステム –

2

INNODBはファイルシステムのシンボリックリンクでは動作しません。

+0

私はそれを確認しようとはしませんでしたが、共有テーブルスペースではなく、テーブル単位のファイルオプションでInnoDBを使用するとうまくいく可能性があります。 –

+0

InnoDBで試してみましたが、うまく動作します。 – TimP

+0

リンクが** datadir **/'/ var/lib/mysql'にある場合はうまく動作します。あなたは残念ながら、長い名前のdbの壊れたバージョンを取得します。 – TimP

0

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を更新すると、問題が発生する可能性があります。この文を使用し、あなたのデータディレクトリの場所を決定するために

SHOW VARIABLES LIKE 'datadir'; 

出典:http://dev.mysql.com/doc/refman/5.1/en/symbolic-links.html

のUbuntu/Debianの例

警告:MyISAMテーブル

で動作しません

1)データディレクトリの場所を特定する:permisionsを修正)

ln -s current_db db_alias 

4:

echo "SHOW VARIABLES LIKE 'datadir';" | mysql -u root -p 

2)あなたのデータディレクトリの場所に移動し、mysqlサービス停止:

sudo su 
service mysql stop 
cd path/to/datadir 

3)ソフトリンクを作成します

chown -R mysql:mysql db_alias 

5)スタートンmysql:MySQLは内蔵の何かを持っていない場合

service mysql start 
関連する問題