2017-01-13 14 views
1

私は1つのデータベースから別のデータベース(2つの異なるサーバでも)から膨大な量のデータ(数分ごとに約200kレコード)を転送しようとしています。両方のテーブルのテーブルスキーマは両方ともdbsが同じです。php PDO転送の結果をデータベース

メモリの制限エラーを引き起こすことなく、巨大な結果セットをdbに転送するにはどうすればよいでしょうか。

現在のソリューションは次のようになります。しかし、これは私がwriteToDB2()に約200kのInsert querysを実行することを意味し、それは私にはあまり効果的ではないようです。

$stmt = $this->db_1->query("SELECT foo from bar"); 
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
    writeToDB2($row); 
} 

誰かがデータを一括転送するためのより良いソリューションを知っていましたか?

+0

レプリケーションのようにmysqldumpをするのですか?しかし、それ自体の欠点があります – frz3993

答えて

1

他の回答は、同じユーザーが両方のデータベースにアクセスできる場合にのみ機能します。

汎用ソリューションは、すべてのPHPおよびPDOを忘れると、コンソールmysqlのシェルを使用して

mysqldump -uuser1 -ppassword1 db1 tablename | mysql -uuser2 -ppassword2 db2 
1

幸いにも、mysqlはINSERT SELECTスパニングデータベースをサポートしています。

$stmt = $this->db_1->query("INSERT INTO db2.bar(foo) SELECT foo from db1.bar"); 
$stmt->execute(); 
+0

しかし、残念ながらそれらのデータベースは同じサーバー上で実行されません。したがって、私は2つのdbハンドヘルドを持っています – rockZ

+0

あなたの唯一のオプションは複製です。 – e4c5