MySQLクライアントを使用してクロスサーバー選択クエリを作成することは可能ですか?基本的には以下のような設定です。
サーバーIPデータベース
--------- --------
1.2.3.4テスト
a.b.c.dテスト
1.2.3.4のテストデータベースのテーブルから行を選択し、テーブルの結果をa.b.c.dのテストデータベースに挿入するクエリを作成したい
サーバーが数マイル離れているため、2つを接続するためにSSHトンネルを開きます。
ポインタはありますか?
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を処理すると、いくつかの問題が発生する可能性があります。
サーバーの1つで連合テーブルを使用するのはどうですか?クエリで使用するリモートテーブルに基づいて連合テーブルを作成し、データベースがすべてローカルであるかのようにクエリを実行します。以下の例 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つのテーブルのすべての列)を実行し、INSERT
に有効なSQLを生成する方法があることを意味します。次に、送信元サーバーのそのようなmysqldump
コマンドの出力を、送信先サーバーのmysql
コマンドにパイプ処理できます。
mysqldump
コマンドに--no-create-info
や--no-add-locks
のようないくつかのオプションを含めたいと思うでしょう。出力が希望どおりになるまでテストします。