Каков наилучший способ хранения базы данных MySQL в системе контроля версий? - PullRequest
8 голосов
/ 14 января 2010

Я работаю над приложением с несколькими другими людьми, и мы хотели бы сохранить нашу базу данных MySQL в системе контроля версий. Я думаю, что два имеют два файла: один будет сценарий создания для таблиц и т. Д., А другой будет вставки для наших образцов данных. Это хороший подход? Кроме того, каков наилучший способ экспорта этой информации?

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

Ответы [ 5 ]

3 голосов
/ 14 января 2010

Это процесс, который я использую для управления версиями баз данных MySQL в Subversion.

Настройка SVN

В SVN создайте папку Databases с подпапкой для каждой базы данных, которую вы хотите добавить в SVN.

Добавление таблицы db_version в базы данных

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

create table db_version (
        `id` int auto_increment,
        `majorReleaseNumber` int,
        `minorReleaseNumber` int,
        `pointReleaseNumber` int,
        `scriptName` varchar(50),
        `dateApplied` datetime,
        PRIMARY KEY(`id`)
);

majorReleaseNumber - Основные выпуски представляют собой значительные изменения в базе данных.

minorReleaseNumber - Незначительные выпуски - это усовершенствования базы данных, для которых не требуется основной выпуск.

pointReleaseNumber - Точечный выпуск обычно представляет собой простое исправление ошибки.

scriptName - Имя сценария sql, который внес изменения в схему.

dateApplied - Когда скрипт был запущен в этой базе данных.

Создание базовых сценариев

Я использовал mysqldump для генерации скрипта создания для существующих баз данных. Обязательно включите опцию --no-data. SVN используется для отслеживания сценариев, которые вносят изменения в схему базы данных, и не предназначен для использования в качестве инструмента резервного копирования для данных конкретного экземпляра приложения.

$ mysqldump -h localhost -u root -p db_1 --no-data > db_1.1.0.0.sql

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

db_1.1.0.0.sql

В конце сценария обязательно добавьте оператор вставки для таблицы db_version.

Изменение схемы базы данных

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

3 голосов
/ 14 января 2010
3 голосов
/ 14 января 2010

Звучит как хороший подход. Вы можете различать различные ревизии, как с точки зрения структуры таблицы, так и данных. Ницца!

Наилучшим способом создания дампов, вероятно, является **mysqldump**, поскольку его можно легко автоматизировать - один раз с помощью --no-data для получения операторов создания, один раз с --no-create-info --no-create-db для получения данных.

2 голосов
/ 14 января 2010

Я работаю в среде, использующей безопасный исходный код Microsoft и сервер Oracle / Sql.

Мы обнаружили, что хранение каждого пакета / процедуры, создание сценария таблицы и т. Д. В отдельном текстовом файле было лучшим способом сделать это. Это означает, что при обслуживании пакетов разработчики могут просто оформить 1 пакет и т. Д., В котором они нуждаются. После внесения и проверки изменений их можно проверить.

1 голос
/ 14 января 2010

У вас определенно правильная идея. Вот пара хороших статей на эту тему:

...