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

Я работаю с PHP и mySQL. Я наконец-то разобрался с системой управления версиями и вполне доволен всем, что касается разработки (тестирования) v производства v репозитория для части PHP.

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

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

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
16
0
12 012
7

Ответы 7

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

DDL? Я никогда раньше не слышал эту аббревиатуру.

Thomas Owens 18.11.2008 23:21

Ах. Я с этим знаком. Думаю, я никогда раньше не видел сокращений.

Thomas Owens 18.11.2008 23:23

вам может пригодиться "SHOW CREATE TABLE tablename". Вы можете создать и изменить свою таблицу (добавив индексы и изменить типы данных), используя свой предпочтительный инструмент, а затем создать DDL для готовой статьи.

Ken 19.11.2008 11:01

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

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

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

Я делаю нечто подобное с системой управления версиями, но здесь я бы выделил следующее: Я записываю все объекты в отдельные файлы, поэтому в исходном элементе управления есть история изменений на уровне объекта, а не один большой файл, который постоянно меняется.

John MacIntyre 18.11.2008 23:53

Да, Джон, это хороший план. Я тоже этим занимаюсь, и, наверное, мне следовало быть более ясным в моем первоначальном ответе. Каждый объект (таблица, процедура и т. д.) - это отдельный файл.

ahockley 19.11.2008 20:20

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

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

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

Затем я архивирую их в каталог, который называется примерно так:

\deploy.YYMMDD\

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

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

Удачи

Хороший план, но зачем ждать окончания развертывания, чтобы начать писать сценарии? Запишите все с самого начала, и все готово!

ahockley 18.11.2008 23:28

@ ahockley-Это первое развертывание, о котором я говорил. Пока у меня действительно есть рабочая копия в производственной среде, я не беспокоюсь об этом, поскольку я буду использовать какой-то инструмент для первоначального развертывания. В SQLServer; Я бы использовал резервное копирование и восстановление. Когда он находится в производстве, я становлюсь параноиком. ;-)

John MacIntyre 18.11.2008 23:48

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

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

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

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

Смотрите также

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

Это распространенный вопрос, который задавали и на него много раз отвечали.

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

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

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

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

Так что по большей части проблема исчезает.

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

Тогда я добавил концепцию live-read-only db connection. Приложение трактует это иначе. Это немного похоже на то, как ваше приложение может обрабатывать веб-службу, такую ​​как Google Apps. Это «какой-то внешний ресурс, который использует ваше приложение».

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

Поэтому вместо того, чтобы задавать вопрос «dev dbИЛИ ЖЕproduction db?», Мое приложение спрашивает «local dbИЛИ ЖЕlive-read-only db».

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

Другие вопросы по теме