Смержить две базы данных?

Привет, Великий Хабр!


Подскажи, пожалуйста, как решить такую задачу?

Есть одна БД, в которой много данных — миллионы записей.

Есть вторая БД, которая получена из первой когда-то давно путём добавления некоторых полей в некоторые таблицы.

Нужно какой-нибудь тул, который позволил бы данные из первой БД залить по-быстрому во вторую БД, с учётом того, что какие именно новые поля и в какие таблицы были добавлены — неизвестно и не очень хочется узнавать.

Т.е. нужно именно тул.


СУБД MySQL.


Спасибо!
  • Вопрос задан
  • 6954 просмотра
Решения вопроса 1
Damaskus
@Damaskus
А если запросом:

delete db2.table from db2.table 
join db1.table 
on (db1.table.f1=db2.table.f1 and db1.table.f2=db2.table.f2 and db1.table.f3=db2.table.f3...)

Во второй базе останется дельта, которую затем нужно залить в первую.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Вам нужен тул? Пожалуйста: SQL + mysql.exe или что-нибудь из списка + MySQL драйвер: C, C++, C#, Java, Go, D, Lisp, Scheme, Pascal, Visual Basic, Python, Fortran, PHP, Perl, Ruby, F# + я могу продолжать извращения с другими языками.

А так не охота думать над вашей проблемой и не очень хочется её узнавать.
И ваще судя по вашему вопросу, вы не особо хотите что-то там решать, а то бы сами посидели и в гугле поспрашивали…
Ответ написан
@korvindest
Со всем уважением к вам хочу отметить, что задача мерджа, даже просто текстовых файлов, далеко не всегда возможна в автоматическом режиме. То что хотите автоматически проделать вы, на порядок сложнее, поэтому хотите вы или нет, но потрудиться головой и руками скорее всего придется.

Могу только посоветовать пути к решению этой проблемы.
1. Раз база настолько большая, к ней должна существовать схема. Сравнив различия двух схем можно написать SQL скрипты, которые смерджат данные. Если схемы БД не существовало, то очень рекомендую ее сделать.

2. Можно попробовать чуть более извращенный вариант, работоспособность которого я не гарантирую. При помощи менеджера базы (любого, хоть phpMyAdmin) вылить структуру и данные в файлы. И мерджить как обычные текстовые файлы. Но откровенно говоря при больших объемах я бы от этой задачи сошел с ума.

Удачи!
Ответ написан
Комментировать
Vlad911
@Vlad911 Автор вопроса
Понятно, спасибо. Решение конкретной этой задачи нашёл в виде:
выгрузить дампы, сравнить CREATE TABLE запросы, на основе их различий записать ALTER TABLE.
Запросы INSERT переписать в вид INSERT INTO… SET.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы