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();