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