@yuretzgt

Как синхронизировать базы данных Test и Production?

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

Имеем:
production - работает, принимает заказы, фиксирует их в базу, другие скрипты обновляют что-то
test - на нем создаем новые товары, проверяем что все ок, и только после этого хотим их выгрузить на production

но как? делать дамп на продакшене, останавливать всю работу с базой и затем выгружать обратно - не вариант. явно же есть какое-то решение.
  • Вопрос задан
  • 281 просмотр
Пригласить эксперта
Ответы на вопрос 2
ky0
@ky0
Миллиардер, филантроп, патологический лгун
Зачем делать полную перезаливку для добавления нескольких товаров? Добавляйте в продукционную базу инкрементально - только то, что изменилось.
Ответ написан
@rPman
Правильно - исключить 'ручную' работу в процессе переноса релизных изменений в продакшен базу.
Т.е. задача разработчика делать скрипты, которые будут приводить базу данных предыдущей версии к следующей, при этом это не только обновление структуры (это кстати можно сделать автоматически, сравнив базы разных версий, гуглить ddl diff, к примеру для postgres это pgadmin shema diff) но и данные, например наполнение новых полей данными или к примеру в старой версии поле было текстовое в 'свободном формате', а в новой на его основе целая структура (вырожденный пример - был адрес текстовой строкой а стал чуть ли не целым ФИАС).

Цель - процесс установки обновления может выглядеть так: делаем реплику продакшн -> накатываем обновление -> проводим тестирование -> если все хорошо - повторить на продакшн, остановив ее, иначе отправляем багрепорт разработчикам. Причем все это скриптами автоматически (само собой если для тестирования есть таковые).

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

Тестовая база может быть репликой базы, ей не обязательно быть с самыми свежими данными (хотя если апдейт - фикс бага для данных, которые ввели недавно пользователи - то нужен оперативный бакап).
p.s. Для эффективного создания реплик продакшн базы можно использовать комбинацию master-slave репликации и снапшоты файловой системы (slave базу можно кратковременно приостанавливать, создавать снапшот файловой системы и запускать из него копию базы, первая же slave реплика должна продолжать работать, накапливая изменения с продакшен)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы