php PDO перенос результатов в базу данных

Я пытаюсь перенести огромное количество данных (около 200 тыс. Записей каждые несколько минут) из одной базы данных в другую (также на двух разных серверах). Таблицы на обеих таблицах одинаковы.

Так что это лучший способ передать огромный набор результатов в БД, не вызывая ошибку ограничения памяти.

мое текущее решение выглядит так. Но это означает, что я запускаю около 200 тыс. Запросов на вставку в writeToDB2() и это, кажется, не очень эффективно для меня.

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

Кто-нибудь знал лучшее решение для массовой передачи данных?

2 ответа

Решение

Другой ответ работает, только если один и тот же пользователь имеет доступ к обеим базам данных.

Решение общего назначения - вообще забыть о PHP и PDO и использовать консольную оболочку mysql и mysqldump наподобие

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

К счастью, mysql поддерживает охватывающие базы данных INSERT SELECT.

$stmt = $this->db_1->query("INSERT INTO db2.bar(foo) SELECT foo from db1.bar");
$stmt->execute();
Другие вопросы по тегам