ホスト server_A の MySQL データベース dbtest に格納されているテーブル test1 があります。ホスト server_B のデータベース MySQL test2 にビュー V を作成したいと考えています。テーブル test2 からビュー V にデータを読み込みたいのですが...レプリケーションの使用が許可されていません。MySQL は別の MySQL サーバーからデータを読み取ることさえできますか? 出来ますか?
1 に答える
この動作を実装する可能な方法の 1 つは、(MyISAM、InnoDB などではなく) FEDERATEDストレージ エンジンでテーブルを使用することです。
このストレージは本質的にプロキシです。ホスト ' remote_host ' のデータベース ' remote_db ' にテーブル ' remote_table ' があるとします。そのテーブルを、ホスト ' local_host ' のデータベース ' local_db 'のローカル テーブルであるかのように使用する場合は、FEDERATED strange エンジンを使用して ' local_db ' に新しいテーブル ' local_table ' をセットアップし、それを「remote_host.remote_db 」の「 remote_table」。仮想のプロキシ テーブルとして機能し、MySQL クライアント API を介してステートメントをリモート テーブルに転送し、結果を返します。
FEDERATEDテーブルのセットアップと使用は、ばかばかしいほど簡単です。
remote_db では、セキュリティ上の理由から、権限が制限された、このテーブル専用のユーザーを作成することを除いて、特別なことをする必要はありません。
local_db で、remote_table をミラーリングする新しいテーブルを作成します。
CREATE TABLE federated_table (
[column definitions go here]
)
ENGINE=FEDERATED
CONNECTION='mysql://remote_user@remote_host:9306/remote_db/remote_table';
これらの最後の 2 行はすべての魔法を行います。行で指定されたリモート テーブルのプロキシとしてこのテーブルを機能させますCONNECTION
。
ただし、いくつかの落とし穴があります-トランザクションがない、クエリキャッシュがない(local_hostサーバー上)、巨大なバッチ挿入でのパフォーマンスの低下など...
参考文献: MySQL のドキュメント