Долгое время мы хранили наши данные в репозитории проекта. Мы просто держали все под данными /sql, и каждая таблица имела свои файлы create_tablename.sql и data_tablename.sql.
Теперь мы только что развернули наш второй проект на Scalr, и мы поняли, что это немного грязно.
Способ развертывания:
У нас есть "пакетная" коллекция скриптов, которые разрывают проект на 3 архива (данные, код, статические файлы), которые мы затем сохраняем в 3 отдельных ведрах на S3.
Всякий раз, когда роль запускается, она загружает один из файлов (в зависимости от роли: данные, nfs или web), а затем "распаковка" script устанавливает все для каждой роли, загружает данные в mysql, устанавливает up nfs и т.д.
Мы делаем это так, потому что мы не хотим сохранять образы серверов, мы всегда начинаем с экземпляров ванили, на которые мы устанавливаем все с нуля, используя различные встроенные скрипты. Время запуска не является проблемой (у нас есть готовая ферма в 9 минут).
Проблема заключается в том, что боль пытается найти нужную версию базы данных всякий раз, когда мы пытаемся установить новую конструкцию разработки (в любой момент времени у нас есть около 4 сборщиков для проекта). Кроме того, git начинает задыхаться, когда мы входим в производство, так как файлы sql в итоге составляют около 500 МБ.
Возникает вопрос:
Как все остальные управляют базами данных? Я искал что-то, что позволяет легко выводить данные из производства в dev, а также переносить данные из dev в производство, но не наткнулся на что-либо.