Ми використовуємо щось подібне до bcwoord, щоб зберегти наші схеми баз даних синхронізованими через 5 різних установок (виробництво, постановка та декілька інсталяцій розробки), і створили резервну копію в контролі версій, і це працює досить добре. Я детальніше докладу:
Щоб синхронізувати структуру бази даних, у нас є один скрипт, update.php та кількість файлів з номером 1.sql, 2.sql, 3.sql тощо. Сценарій використовує одну додаткову таблицю для зберігання поточного номера версії база даних. Файли N.sql створюються вручну, щоб перейти від версії (N-1) до версії N бази даних.
Їх можна використовувати для додавання таблиць, додавання стовпців, переміщення даних зі старого у новий формат стовпців, потім скидання стовпців, вставки рядків "головних" даних, таких як типи користувачів тощо. В основному, це може робити все, що завгодно, і з належними даними сценарії міграції ви ніколи не втрачаєте дані.
Сценарій оновлення працює так:
- Підключення до бази даних.
- Зробіть резервну копію поточної бази даних (бо матеріал буде йти не так) [туздИшпр].
- Створіть таблицю бухгалтерії (називається _meta), якщо її немає.
- Прочитайте поточну VERSION з таблиці _meta. Припустимо 0, якщо його не знайдено.
- Для всіх .sql-файлів, які мають номер VERSION, виконайте їх у порядку
- Якщо в одному з файлів сталася помилка: поверніться до резервної копії
- В іншому випадку оновіть версію в таблиці бухгалтерського обліку до найвищого .sql-файлу, виконаного.
Все переходить у контроль джерела, і кожна установка має сценарій для оновлення до останньої версії одним виконанням сценарію (виклик update.php з належним паролем бази даних тощо). Ми оновлюємо SVN для постановки та виробничого середовища за допомогою сценарію, який автоматично викликає скрипт оновлення бази даних, тому оновлення коду відбувається з необхідними оновленнями бази даних.
Ми також можемо використовувати той самий сценарій, щоб відтворити всю базу даних з нуля; ми просто скидаємо та відтворюємо базу даних, а потім запускаємо скрипт, який повністю переповнить базу даних. Ми також можемо використовувати сценарій для заповнення порожньої бази даних для автоматизованого тестування.
На створення цієї системи знадобилося лише кілька годин, це концептуально просто, і кожен отримує схему нумерації версій, і це було безцінне в тому, щоб мати можливість рухатися вперед і розвиватися дизайн бази даних, не маючи зв'язку або вручну виконувати модифікації на всіх базах даних.
Остерігайтеся, коли вставляєте запити з phpMyAdmin, хоча! Ці згенеровані запити зазвичай містять ім’я бази даних, якого ви точно не хочете, оскільки воно порушить ваші сценарії! Щось на зразок СТВОРИТИ СТОЛ mydb
. newtable
(...) вийде з ладу, якщо база даних у системі не називається mydb. Ми створили гачок SVN для попереднього коментаря, який забороняє .sql файли, що містять mydb
рядок, що є вірним знаком того, що хтось копіює / вставляє з phpMyAdmin без належної перевірки.