FEDERATED ストレージエンジンは、レプリケーションやクラスターテクノロジを
使わずに、ローカルサーバ上のリモートMySQLデータベースからデータに
アクセスすることを可能にします。FEDERATED テーブルを利用する時、
ローカルサーバ上のクエリはリモート(federated)テーブル上で自動的に
実行されます。ローカルテーブル上にはデータは何も格納されません。
データは、ネットワークに接続された他のMySQLサーバ(リモートサーバ)
上のデータベース内に格納されています。
MS SQLでいうリンクサーバー、オラクルでいうDB LINKに近い
機能かなと考えてます。
ソースからMySQLを構築し FEDERATED ストレージエンジンの機能を
有効にするには、–with-federated-storage-engine オプションの
configure コマンドを実行します。
Federatedエンジンではリモートサーバ上のテーブルが、
ローカルサーバ上のデータベース内に存在するかのように動作します。
ローカルサーバのFederatedテーブルにアクセスするアプリケーションは、
リモートサーバの存在を意識することなく処理を行えます。
処理結果はリモートサーバ上のテーブルに反映されます。
データベースのあるリモートサーバ、(.frm ファイルに格納されている)
テーブル定義や関連テーブルのテーブルによって成り立っているもので
あると言い換える事もできます。リモートテーブルのテーブルタイプは
MyISAM や InnoDB を含むリモート mysqld サーバに
サポートされている全てのタイプと言えるかもしれません。
1. リモートサーバ上にテーブルを作成します。または、
SHOW CREATE TABLE ステートメントを利用したりして、
存在するテーブルのテーブル定義のノートを作成します。
2. ローカルサーバ上に同一のテーブル定義を使ってテーブル
を作成しますが、そのときローカルテーブルをリモートテーブルにリンク
させるための接続情報を追加します。
CONNECTIONを利用して FEDERATED テーブルを作成
CREATE SERVERを利用してFEDERATED テーブルを作成
FEDERATEDストレージエンジンを専門に扱うフォーラム
━ Federatedテーブルに対しては、以下のコマンドが実行が可能 ━
SELECT文
INSERT文
UPDATE文
DELETE文
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
※実際のデータへの処理はリモートサーバにて行われるため、
リモートサーバにてインデックスが有効であれば、
インデックスが使用されます。
━━━Federatedエンジンにはいくつかの制約があります ━━━━
* トランザクションをサポートしません
* ALTER TABLE文とDROP TABLE文をサポートしません
* クエリーキャッシュをサポートしません
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ローカルサーバとリモートサーバを同一のサーバにて構成することも可能
しかし同一サーバで構成するケースはあまりありません。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
scheme://user_name[:password]@host_name[:port_num]/db_name/tbl_name
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
scheme “mysql”文字列固定
user_name リモートサーバへ接続するためのユーザ名
password リモートサーバへ接続するためのパスワード(省略可能)
host_name リモートサーバのホスト名
port_num リモートサーバの接続ポート(省略可能)
db_name リモートサーバ上の対象データベース名
tbl_name リモートサーバ上の対象テーブル名
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Federatedテーブルを作成する際は、事前に対象となるリモートテーブルが
存在し、それが接続可能な状態になっている必要があります。
もし、リモートテーブルが存在しないとCREATE TABLE文の実行が
正常終了しません。
Federatedテーブルを作成するとローカルサーバ上のデータベースディレクトリ
内に、どのようなカラム構成にてできているかなどのテーブル構造のデータが
格納された「テーブル名.frm」ファイルのみが作成されます。ディスク上に
データを格納するためのファイルは存在しません。
※ メモリーテーブルと同じ。