развертывание тестового и производственного сервера с помощью инфраструктуры yii - синхронизация изменений БД - PullRequest
1 голос
/ 13 сентября 2011

Я работаю над приложением на основе фреймворка Yii, где мне нужно протестировать приложение на локальном компьютере, а затем, когда все будет готово, перенести изменения на рабочий сервер.

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

Есть ли рекомендуемый и удобный способ справиться с этим?Синхронизация исходного кода менее важна, я использую SVN и могу сделать экспорт SVN;rsync ...

Ответы [ 4 ]

2 голосов
/ 13 сентября 2011

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

Yii поддерживает Миграции (начиная с v1.1.6), хотя это может быть больше проблем, чем стоит, в зависимости от того, как часто вы вносите изменения и насколько совместным является ваш проект.

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

Лучший подход будет зависеть от затрат / выгод для вашего конкретного проекта / рабочего процесса.

1 голос
/ 13 сентября 2011

Для аналогичного проекта мы

  1. использовать MySQLWorkbench (MWB) для разработки и редактирования схемы
  2. отправить файл .mwb через VCS.
  3. Когда один из нас устраивает изменение, он использует mysqldump --complete-insert ... в производственной и тестовой схемах, чтобы сгенерировать копию существующих тестовых и производственных данных с именами полей
  4. вытащить все операторы вставки производственного сервера в (3) и поместить их в защищенный / data / insert.sql
  5. используйте пункт меню «инженер-форвард» в MWB на модифицированной модели, чтобы сгенерировать sql для сохранения в файл с именем protected / data / create.sql, при необходимости отредактировав вручную (обязательно используйте условие if exists для уменьшить ошибки)
  6. написать файл drop.sql на основе операторов drop в (3)
  7. используйте MWB, запустите sql (drop.sql, create.sql, insert.sql) после выполнения соответствующей команды «use database», которая идентифицирует производственную базу данных
  8. устраняет все ошибки в (7), устраняя любые недопустимые вставки из-за столбцов / полей, которые не нужны в новых моделях / схемах. Рерун (7)
  9. иметь дело с новыми полями в (7), которым нужны данные, отличные от Null. Рерун (7)

Теперь у вас есть снимок вашей схемы (drop.sql create.sql) и ваших данных, которые должны восстановить ваш тестовый или рабочий сервер, если у вас возникнут проблемы. И у вас есть «фиксатор» данных, которые были на вашем рабочем сервере (insert.sql), которые можно использовать для ускорения работы вашего тестового сервера или в качестве резервной копии данных рабочего сервера (которые быстро устаревают) , Очевидно, что все отношения с внешним ключом являются действительно болезненными, поэтому редко когда insert.sql полезен для чего-либо, кроме обновления схемы и восстановления производственных данных после этого изменения. Очевидно, что требуется некоторое время, чтобы выявить перегибы в процессе, чтобы задержка между (3) и (9) была достаточно мала, чтобы пользователи рабочего сервера не замечали простои.

Очевидно, что "Rerun (7)" становится повторяющимся и быстро превращается в сценарий оболочки, который напрямую вызывает mysql. Также другими шагами в процессе редактирования sql становятся sed сценарии.

1 голос
/ 13 сентября 2011

Вы можете попробовать SQLyog Schema Synchronization Tool, который представляет собой инструмент визуального сравнения / синхронизации, разработанный для разработчиков, которые работают между различными серверами MySQL или которым необходимо синхронизировать базы данных между двумя серверами MySQL.Это означает создание отчетов о различиях между таблицами, индексами, столбцами и процедурами двух баз данных и создание сценариев для их синхронизации.В схеме будет синхронизироваться только схема.

0 голосов
/ 13 сентября 2011

Посмотрите на инструмент сравнения схем в dbForge Studio for MySQL. Этот инструмент поможет вам сравнить и синхронизировать две базы данных или проект базы данных с указанной базой данных.

Также есть отдельный инструмент - dbForge Schema Compare для MySQL .

...