Синхронизация базы данных между обновлениями Mercurial - PullRequest
2 голосов
/ 20 апреля 2011

Итак, у меня есть среда разработки и производства, которая обращается к одному и тому же репозиторию BitBucket, и изменения, которые я отправляю в репозиторий, я опускаю на производственном сервере, используя hg pull и hg update.

Благодаря этому мой PHP-код обновляется и работает нормально.

Но я мог бы воспользоваться некоторыми советами, чтобы синхронизировать мои схемы MySQL между двумя средами. Например, я часто делаю изменения на компьютере разработчика, которые мне нужно отразить на рабочем сервере.

Любые советы о том, как это сделать, будут с благодарностью приняты.

Ответы [ 2 ]

3 голосов
/ 20 апреля 2011

То, что вы пытаетесь сделать, в двух словах, это версия вашей схемы базы данных, чтобы она соответствовала коду при изменении ситуации.Важнейшая часть способности сделать это - уметь отслеживать изменения в схеме БД, а также уметь отслеживать текущее состояние схемы БД (т. Е. В какой она версии)

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

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

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

Очевидно, существует рядпроблем, которые нужно решить, и множество тестов, которые нужно выполнить, чтобы все это заработало, и это никоим образом не является готовым решением для вас, но оно должно помочь вам в автоматизации ваших обновлений БД для их сохранения.в соответствии с вашим кодом.Удачи!

2 голосов
/ 20 апреля 2011

Посмотрите на фреймворк Rails.Они используют миграцию базы данных, чтобы манипулировать (даже создавать) базой данных.Он отлично интегрируется с тестированием и на всех машинах разработки (для команд).Это Ruby (который многие считают предпочтительным PHP), поэтому он не будет работать для вас, пока вы не переключитесь, но он может дать вам некоторые идеи о том, как реализовать это для вашего приложения.

http://guides.rubyonrails.org/migrations.html

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

Active Record отслеживает, какие миграции уже были выполнены, поэтому все, что вам нужно сделать, это обновить исходный код изапустить грабли дБ: мигрировать.Active Record определит, какие миграции следует запустить.Он также обновит ваш файл db / schema.rb, чтобы он соответствовал структуре вашей базы данных.

...