そりゃ、5.0.3 から FEDERATED エンジンが実装されたので見れませんでした。おわり。
4.x 系で稼働している MySQL(DB-A) のデータを、新しく構築する 5.1.x 系(DB-B)にあるサマリーテーブルに格納して有効活用するという案件が浮上してきたため。
DB-B にある DB を DB-A 側から MS SQL Server のリンクサーバーのように扱いたいという。
元々は MS SQL Server から、ODBC 経由で DB-B の DB をリンクサーバーを利用して操作するつもりでいたのですが、今回 MySQL 4.x 系のデータも同様のように処理する(かもしれない)ということに。
DB-A から DB-B をリンクサーバーのように参照するには?と考えたところ浮上してきたのが FEDERATED エンジン。
要は何が言いたいかと言うと、5.x 系での FEDERATED エンジンの記事はいっぱいあるけど、異なるバージョン間での FEDERATED エンジンを利用した記事が全然なかったので、実際に試してみました的なメモ。
FEDERATED エンジン使うの初めてなの……。
1.構成
- ◆リモートサーバー(DB-A)
- MySQL 4.1.15
- ◆ローカルサーバー(DB-B)
- MySQL 5.1.38
DB-A 側では FEDERATED エンジンが利用できないので、DB-B 側でローカルサーバーとします。
よくある記事ではローカルだとかリモートだとか、実際触ってみなくちゃ良くわからんかったです。触ってみた感覚としては、DB-A を DB-B 側からマウントするようなイメージが一番しっくりきました。
2.DB-A のテーブル確認
リモート側(参照される側)のテーブルは以下のような感じで作られているとします。
`CDate` timestamp NOT NULL default CURRENT_TIMESTAMP,
`Status` enum(‘Up’,'Down’) default NULL,
`Memo` varchar(255) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
3.DB-B での FEDERATED エンジン利用の設定
自分が利用した MySQL 5.1.38 では、デフォルトで FEDERATED エンジンが DISABLED になっているため、そのままでは利用できません。
my.conf に利用出来るようにするための設定を記述する必要があります。
[mysqld]
federated
4.DB-B から DB-A のテーブルへ接続する
既に DB-A に存在するテーブルへ接続します。
感覚的には枠を用意してあげてリンクさせる感じでしょうか。
`CDate` timestamp NOT NULL default CURRENT_TIMESTAMP,
`Status` enum(‘Up’,'Down’) default NULL,
`Memo` varchar(255) default NULL
) ENGINE=FEDERATED DEFAULT CHARSET=utf8
CONNECTION=’mysql://[UserName]:[Password]@[RemoteIP]:3306/[DBName]/[TableName]‘;
最後の「CONNECTION」の箇所が重要です。
[UserName][Password]は MySQL のユーザー名とパスワードになります。
[DBName][TableName]は、DB が「Test」だとした場合、今回は「/Test/tbl_ServerStatus」になります。
以上、設定おわり。
実際に SELECT してデータを参照することが出来ました。また、INSERT, UPDATE, DELETE も問題なく反映されました。
official.MySQL :: 世界でもっとも普及している、オープン ソース データベース

