Мы используем что-то похожее на bcwoord, чтобы синхронизировать схемы нашей базы данных в 5 различных установках (производственная, промежуточная и несколько установочных), и резервное копирование в управлении версиями, и это работает довольно хорошо. Я уточню немного:
Для синхронизации структуры базы данных у нас есть один скрипт, update.php и несколько файлов с номерами 1.sql, 2.sql, 3.sql и т. Д. Сценарий использует одну дополнительную таблицу для хранения текущего номера версии база данных. Файлы N.sql создаются вручную для перехода от версии (N-1) к версии N базы данных.
Их можно использовать для добавления таблиц, добавления столбцов, переноса данных из старого в новый формат столбцов, затем отбрасывания столбца, вставки строк «основных» данных, таких как типы пользователей и т. Д. В принципе, он может делать все что угодно и с надлежащими данными. Скрипты миграции, вы никогда не потеряете данные.
Скрипт обновления работает так:
- Подключиться к базе данных.
- Сделайте резервную копию текущей базы данных (потому что все пойдет не так) [mysqldump].
- Создайте бухгалтерскую таблицу (называемую _meta), если она не существует.
- Считайте текущую ВЕРСИЮ из таблицы _meta. Предположим, 0, если не найден.
- Для всех файлов .sql с номерами выше VERSION выполните их по порядку
- Если один из файлов выдал ошибку: откат к резервной копии
- В противном случае обновите версию в бухгалтерской таблице до самого высокого выполненного файла .sql.
Все идет в систему контроля версий, и в каждой установке есть скрипт для обновления до последней версии с помощью одного скрипта (вызов update.php с правильным паролем базы данных и т. Д.). Мы SVN обновляют промежуточные и производственные среды с помощью сценария, который автоматически вызывает сценарий обновления базы данных, поэтому обновление кода сопровождается необходимыми обновлениями базы данных.
Мы также можем использовать тот же скрипт для воссоздания всей базы данных с нуля; мы просто отбрасываем и воссоздаем базу данных, затем запускаем сценарий, который полностью заполняет базу данных. Мы также можем использовать скрипт для заполнения пустой базы данных для автоматического тестирования.
Установка этой системы заняла всего несколько часов, она концептуально проста, и каждый получает схему нумерации версий, и она была неоценима, поскольку имела возможность двигаться вперед и развивать дизайн базы данных, не связываясь и не выполняя изменения вручную. на всех базах данных.
Но будьте осторожны при вставке запросов из phpMyAdmin! Эти сгенерированные запросы обычно включают в себя имя базы данных, которое вам определенно не нужно, так как это сломает ваши сценарии! Что-то вроде CREATE TABLE mydb
. newtable
(...) потерпит неудачу, если база данных в системе не называется mydb. Мы создали зацепку SVN с предварительными комментариями, которая запрещает файлы .sql, содержащие mydb
строку, что является верным признаком того, что кто-то скопировал / вставил из phpMyAdmin без надлежащей проверки.