2016-04-18 27 views
2

SQLコマンドを実行できるスクリプトがすでに作成されています。問題は、2つの異なるサーバーを扱うときに動作させるように見えないことです。例えば。Perl:異なるサーバから2つのテーブルを同期する

、サーバ2の表Aに、サーバ1のテーブルAからデータを挿入

データベース

insert into `server2`.`database`.`table` select * from `server1`.`database`.`table` where [conditions]; 

がここにサンプルを適用する前に、私は、サーバーの権限を指定: http://www.tutorialspoint.com/perl/perl_database_access.htm

を問題がありますserverAからserverBのコマンドを試してみるとうまくいかないようです。

答えて

0

この問題を2つの部分に分解する必要があります:

  1. Server1の2つのDBIオブジェクトを作成して& Server2とし、接続します。
  2. server1.tableAのデータを結果セットに読み込みます。
  3. ResultSetを繰り返し処理し、server2.tableAにデータを挿入します。

あなたの問題文は、単に以下のツールを使用することを検討し、二つ以上のDBを同期する場合:PT-テーブルシンク:私は、SQLコマンドを行うことができます機能を作成しましたhttps://www.percona.com/doc/percona-toolkit/2.1/pt-table-sync.html

+0

アイデアをありがとう。私はあなたの答えに感謝の意を表しました。 – BashingPerl

1

これはできません。 2つのDB接続が各サーバーに1つ必要です。 1つの接続を使用してソースDBからデータを読み取り、もう1つを使用してターゲットDBにデータを挿入します。

inser/selectは、MySQLによって実行されるDBコマンドです。このようなコマンドを出すことができるのであれば、MySQLコンソールから実行することができます。このためにPerl(または他の言語)は不要です

+0

を。 $ dev - > _ executeQuery( "SET autocommit = 0;"); $ dev - > _ executeQuery( "ロックテーブルクラスタ書き込み、' sample @ server'.'id'.'cluster' read; ");$ dev - > _ executeQuery( "' id'.cluster' select *に 'sample @ server'.id'.'cluster'.db_id' =?"、[$ db_id])を挿入します。 $ dev - > _ executeQuery( "commit;"); $ dev - > _ executeQuery( "unlock tables;"); でも、それでもうまくいきません。 – BashingPerl

+0

あなたの質問に投稿したsqlコマンドは、有効なsqlコマンドではないため、関数を実行することができず、バッシュ言語で書かれているかどうかはわかりません。 –

+1

このようにするのではなく、最初にOne Server.DBからデータを取得してから、別のServer.DBにデータを挿入してください。 – AbhiNickz

関連する問題