База данных разработки и производства?

Я работаю с PHP и mySQL. Я, наконец, обрел контроль над исходным кодом и очень доволен всей разработкой (тестированием) v production v repository для части PHP.

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

Любые мысли о том, куда идти? И, если вы считаете, что лучший способ сохранить две базы данных одинаково (кроме данных, конечно...)?

Ответ 1

Каждая среда должна иметь отдельную базу данных. Script все объекты базы данных (таблицы, представления, процедуры и т.д.) и сохраняйте сценарии в исходном элементе управления. Сценарии применяются сначала к базе данных разработки, затем к экзамену (QA, UAT и т.д.), А затем к производству. Применяя одни и те же сценарии к каждой базе данных, все они должны быть одинаковыми в конце.

Если у вас есть данные, которые необходимо загрузить (таблицы кодов, значения поиска и т.д.), Script эта загрузка данных как часть процесса создания базы данных.

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

Ответ 2

У вас обязательно должно быть два. Чтобы синхронизировать их, вы всегда должны создавать DDL для создания объектов базы данных. Относитесь к этим сценариям, как и код PHP, - держите их в управлении версиями. В любое время, когда вам нужно изменить тестовую базу данных, сделайте script, чтобы это сделать, и проверьте его. Затем вы можете распространять эти изменения в производственной системе, как только будете готовы.

Ответ 3

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

Ответ 4

См. также

Как вы можете изменить схему базы данных?

Это общий вопрос, и его много раз спрашивали и отвечали.

Томас Оуэнс: репликация не используется для схем управления версиями - она ​​предназначена для дублирования данных. Вы никогда не хотите копировать с dev на производство или наоборот.

Ответ 5

После развертывания моей базы данных любые изменения, внесенные в мои базы данных разработки, выполняются в SQL script (а не в инструменте), а script сохраняется и пронумерован.

deploy.001.description.sql
deploy.002.description.sql
deploy.003.description.sql
... etc..

Затем я запускаю каждый из этих сценариев, когда я развертываю.

Затем я архивирую их в каталог под названием

\deploy.YYMMDD\

И начните все сначала.

Если я ошибаюсь, я никогда не вернусь к предыдущему развертыванию script, я создам новый script и поставлю там свое исправление.

Удачи.

Ответ 6

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

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

Запустите экземпляр этого моментального снимка, полностью отключите его от ведомого режима, примените свои изменения и укажите поле QA в этой базе данных. Если он работает по назначению, вы можете запускать патчи против вашей основной производственной базы данных. Если нет, поднимите моментальный снимок и повторите его повторное копирование с мастера, пока вы не будете готовы повторить тест обновления.

Ответ 7

У меня были те же дилеммы. Я застрял, думая, что между production db и t21 существует четкая дихотомия. I. Они были двумя сторонами монеты, и никогда не встречались два.

Многие проблемы исчезли, когда я прекратил делать свое приложение "думать" в терминах "Либо production db ИЛИ development db". Вместо этого мое приложение использует local db.

Когда он работает на моей виртуальной машине (dev), этот локальный db оказывается dev db. Мое приложение действительно не знает об этом.

Итак, для основной части проблема исчезает.

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

Это когда я добавил понятие a live-read-only db connection. Приложение рассматривает это по-разному. Его немного похоже на то, как ваше приложение может обращаться с веб-сервисом, например с Google Apps. Его "некоторый внешний ресурс, который использует ваше приложение".

По умолчанию мое приложение использует local db, а в некоторых особых условиях (в наборе тестов) также используется live-readonly db. (Поскольку его соединение только для чтения, я не боюсь сделать беспорядок живых данных во время тестов).

Чтобы вместо вопроса "dev db ИЛИ production db?", мое приложение спрашивает "local db ИЛИ live-read-only db".

Очевидно, моя ситуация может отличаться от вашей, но я нашел этот "прорыв в понимании" наиболее полезным для меня.