2015-04-09 4 views
1

У меня есть база данных MySQL в производстве (я буду называть ее db1) с большим количеством данных уже.Как я могу автоматически объединить две разные схемы в MySQL?

В dev я внес несколько изменений в его структуру и добавил данные для тестирования. Я назову его db2.

Мне нужно объединить схему db2 в db1 без потери данных db1 и без копирования данных из db2.

Есть ли способ сделать это автоматически (используя скрипты, процедуры или встроенную функциональность Workbench)?

+0

Если базы данных находятся на одном сервере, вы можете просто создать дифференциальный результирующий набор, а затем вставить его в db1. – Hozikimaru

+1

Вот почему вам нужны миграции. Все изменения схемы базы данных должны выполняться с помощью скриптов, будь то скрипт/язык программирования или простой файл SQL. Затем вам нужно отслеживать, какие сценарии уже были запущены, так что в следующий раз, когда вам нужно их запустить, вы не будете запускать их снова. – Populus

ответ

0
  1. дамп схемы вам нужно без данных с туздЫшпром --no-данные
  2. Загрузите автосамосвалы в новую базу данных.
  3. Создайте хранимую процедуру с помощью Dynamic SQL и указатель на информацию schema.tables. В принципе, для каждой таблицы, принадлежащей исходной базе данных, создайте запрос INSERT ... SELECT, который вставляет данные в новую базу данных. Обратите внимание, что вам может потребоваться заблокировать всю базу данных оператором LOCK TABLES, если вы хотите, чтобы данные не изменялись при копировании. Вы также можете создать инструкцию LOCK TABLES с помощью Dynamic SQL.
  4. Выполнено.

Если шаг 3 выглядит сложным, вы можете ВСТАВИТЬ ... ВЫБЕРИТЕ данные вручную. В MySQL нет автоматического способа сделать это: в зависимости от изменений, внесенных в исходную схему, например. добавленные столбцы/индексы/измененные типы полей, может потребоваться другой запрос INSERT ... SELECT.

+0

Мне не нужны новые данные из db2. Мне просто нужна его структура (которая является db1 на стероидах). –

Смежные вопросы