2017-01-13 1 views
1

하나의 데이터베이스에서 다른 데이터베이스로 2 개의 다른 서버로 많은 양의 데이터 (약 2 만개의 레코드가 몇 분 간격으로 전송)를 시도합니다. 두 테이블에있는 테이블 쉐마는 모두 dbs가 같습니다.php PDO 전송 결과가 데이터베이스

그래서 메모리 제한 오류가 발생하지 않고 거대한 결과 집합을 db로 전송하는 가장 좋은 방법은 무엇입니까?

내 현재 솔루션은 다음과 같습니다. 그러나 이것은 내가 약 12 ​​만 2 천 킬로미터의 인서트 쿼리를 writeToDB2()에서 실행한다는 것을 의미하며, 그것은 나에게별로 효과적이지 않은 것으로 보인다.

$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

깔끔한 솔루션이 될 것이지만 불행히도 그 thow 데이터베이스는 동일한 서버에서 실행되지 않습니다. 그래서 두 개의 db-handels가 있습니다 – rockZ

+0

당신의 유일한 옵션은 복제입니다. – e4c5

관련 문제