1

ホスト server_A の MySQL データベース dbtest に格納されているテーブル test1 があります。ホスト server_B のデータベース MySQL test2 にビュー V を作成したいと考えています。テーブル test2 からビュー V にデータを読み込みたいのですが...レプリケーションの使用が許可されていません。MySQL は別の MySQL サーバーからデータを読み取ることさえできますか? 出来ますか?

4

1 に答える 1

4

この動作を実装する可能な方法の 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 のドキュメント

于 2013-01-16T10:07:19.717 に答える