質問

MySQLクライアントを使用してクロスサーバー選択クエリを作成することはできますか。基本的にセットアップは次のようになります。

サーバーIP     データベース
---------      --------
1.2.3.4     テスト
a.b.c.d     テスト

1.2.3.4のテストデータベースのテーブルから行を選択し、テーブルの結果をa.b.c.dのテストデータベースに挿入するクエリを作成したい
サーバーは数マイル離れた場所にあるため、SSHトンネルを開いて2つを接続します。

任意のポインター?

役に立ちましたか?

解決

mysqldump は既に述べたように解決策になるか、 SELECT ... INTO OUTFILE を使用してから LOAD DATA INFILE ... コマンド。

MySQLにはフェデレーテッドストレージエンジンが搭載されているため、便利です。それに関するいくつかのドキュメントがあります http://dev.mysql .com / doc / refman / 5.0 / en / federated-storage-engine.html 私はそれで大きな成功を収めていないことを告白しなければなりませんが、あなたにとってはうまくいくかもしれません。

3番目の解決策は、アプリケーションで作業を行うことです。 SELECT クエリの結果を1行ずつ読み取り、 INSERT を他のサーバーに1行ずつ読み取ります。ただし、データ型とその方法でのnull処理に関する問題が発生する可能性があります。

他のヒント

いずれかのサーバーでフェデレーテッドテーブルを使用する方法は? クエリで使用するリモートテーブルに基づいて連合テーブルを作成し、データベースがすべてローカルであるかのようにクエリを実行します。 MySQLサイト

からの例

FEDERATEDテーブルの使用手順は非常に簡単です。通常、同じホストまたは異なるホストの両方で2つのサーバーを実行しています。 (同じサーバーで管理されている別のテーブルをFEDERATEDテーブルで使用することは可能ですが、そうすることにはほとんど意味がありません。)

最初に、FEDERATEDテーブルを使用してアクセスするリモートサーバー上のテーブルが必要です。リモートテーブルがフェデレーションデータベースにあり、次のように定義されているとします。

CREATE TABLE test_table (
    id     INT(20) NOT NULL AUTO_INCREMENT,
    name   VARCHAR(32) NOT NULL DEFAULT '',
    other  INT(20) NOT NULL DEFAULT '0',
    PRIMARY KEY  (id),
    INDEX name (name),
    INDEX other_key (other)
)
ENGINE=MyISAM 
CHARSET=latin1;

この例ではMyISAMテーブルを使用していますが、このテーブルでは任意のストレージエンジンを使用できます。

次に、リモートテーブルにアクセスするためにローカルサーバーにFEDERATEDテーブルを作成します。

CREATE TABLE federated_table (
    id     INT(20) NOT NULL AUTO_INCREMENT,
    name   VARCHAR(32) NOT NULL DEFAULT '',
    other  INT(20) NOT NULL DEFAULT '0',
    PRIMARY KEY  (id),
    INDEX name (name),
    INDEX other_key (other)
)
ENGINE=FEDERATED
DEFAULT CHARSET=latin1
CONNECTION='mysql://fed_user@remote_host:9306/federated/test_table';

(MySQL 5.0.13より前は、CONNECTIONではなくCOMMENTを使用してください。)

mysqlクライアントは一度に1つのサーバーにしか接続できないので、短い答えはいいえです。しかし、常に方法があります...

最新バージョンの mysqldump は、ダンプされるデータを制限するために使用できる-where パラメーターをサポートしています。これは、単純な SELECT (つまり、1つのテーブルのすべての列)を実行し、有効なSQLを生成して INSERT する方法があることを意味します。その後、ソースサーバーの mysqldump コマンドの出力を、宛先サーバーの mysql コマンドにパイプすることができます。

-no-create-info -no-add-locks などのいくつかのオプションを mysqldump コマンド。出力が希望どおりになるまでテストします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top