ФорумПрограммированиеPHP для идиотов → Синхронизация структуры БД

Синхронизация структуры БД

  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 25 февраля 2009 г. 7:13

    Хватит флудить про сиськи.
    Давайте пофлудим по теме форума.


    Задача:

    Есть набор из N разработчиков, работающих над одним проектом.
    У всех есть локальный сервер и локальная копия проекта, на которой всё тестируется.
    Плюс есть общий тестовый сервер и сервер с уже работающим сайтом.

    Изменения, вносимые в код и структуру БД одним из разработчиков, должны синхронизироваться со всеми существующими копиями.

    Для синхронизации кода есть SVN и ей подобное.
    Что делать с синхронизацией базы?

    Нужно следующее:
    1. Каждый может легко установить(переустановить) весь проект(его часть) с нуля.
    2. Чужие изменения в структуру базы должны вноситься просто и не убивать уже существующие данные.


    Вопрос:

    Для тех, кто решал подобное - как это делали?
    Для тех, кто не решал - как бы сделали?


    Наше решение через жопу:

    Есть папочка с установочными дампами по разделам - "users.sql" (структуры пользователей), "groups.sql" (структуры групп) и т.д.
    Каждый из них полностью устанавливает свой раздел (создаёт все таблицы и начальные данные).
    Так как нужна возможность установки поверх уже существующего, каждая CREATE TABLE предваряется DROP TABLE IF EXISTS.

    Каталог находится под контролем SVN.

    В нём есть подкаталог "/new/" для изменений.

    И вот добавляю я в таблицу `users` новое поле - `is_dolboeb`.
    Первым делом вношу его в users.sql - установочный дамп должен быть актуальным.
    Вторым делом создаю файл /new/090225_vasac.sql:
    ALTER TABLE `users` ADD `is_dolboeb` BOOL NOT NULL DEFAULT '0';

    Не забываю про DEFAULT, так как изменяться должна таблица с уже имеющимися записями.
    Комичу всё это на SVN.

    И вот второй разработчик, назовём его условно adw0rd, после недельного пивозапоя решает наконец поработать.
    Делает UPDATE с SVN - смотрит, ага, новый файлег, vasa_c на этой неделе что-то изменял. И выполняет все новые файлики по очереди.

    Через некоторое время, достаточное для того, чтобы все внесли изменения, файлы из /new/ удаляются чтобы не мешались.
  • phpdude

    Сообщения: 26614 Репутация: N Группа: в ухо

    Spritz 25 февраля 2009 г. 7:17, спустя 3 минуты 31 секунду

    интересная тема. хороший вопрос. давайте делиться опытом, я делал нечто подобное, только проще. а по идее для этого наверное кластер использовать можно)))
    Сапожник без сапог
  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 25 февраля 2009 г. 7:17, спустя 38 секунд

    И вот второй разработчик, назовём его условно adw0rd, после недельного пивозапоя решает наконец поработать.
    Делает UPDATE с SVN - смотрит, ага, новый файлег, vasa_c на этой неделе что-то изменял. И выполняет все новые файлики по очереди.
    именно так :D
    adw/0
  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 25 февраля 2009 г. 7:18, спустя 51 секунду

    phpdude,
    для этого наверное кластер использовать можно)))
    Как? Не понял.
    adw/0
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 25 февраля 2009 г. 7:24, спустя 5 минут 30 секунд

    phpdude, как делал нечто подобное и как по-твоему здесь можно использовать кластер.
  • phpdude

    Сообщения: 26614 Репутация: N Группа: в ухо

    Spritz 25 февраля 2009 г. 7:25, спустя 1 минуту 42 секунды

    ну я так понимаю что кластер должен уметь синхронизировать стрктуру межу собой
    Сапожник без сапог
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 25 февраля 2009 г. 7:31, спустя 5 минут 28 секунд

    В этом случае можно без кластера - просто использовать одну удалённую базу, но тогда будет не только одна структура, а и одни данные.
    А я всё-таки люблю при разработке иметь свою отдельную базу и делать с ней что хочу, не затрагивая остальных.
  • phpdude

    Сообщения: 26614 Репутация: N Группа: в ухо

    Spritz 25 февраля 2009 г. 7:35, спустя 4 минуты

    vasa_c, а понял идею :) я люблю наоборот одни данные, тчобы потом не спрашивать "а какой тут пароль, а как туда войти " и тп
    Сапожник без сапог
  • Josh

    Сообщения: 2009 Репутация: N Группа: Кто попало

    Spritz 25 февраля 2009 г. 7:38, спустя 3 минуты 24 секунды

    Вообще если я правильно понял эти файлики патчами называют :)
    тобишь есть база к примеру. в какуюто папку в с-в-н е ложаться патчи типа 001.sql итд, кудато пишеться последний патч, а потом при старте сайта проверяеться залиты ли все патчи, нет - заливаем. Если не правильно понял ногами не бить :)
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 25 февраля 2009 г. 7:44, спустя 5 минут 51 секунду

    Правильно, у нас только автоматической заливки нет
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 25 февраля 2009 г. 8:00, спустя 15 минут 40 секунд

    Знающие люди советуют:


    EMS MySQL DB Comparer и чел, который делает merge базы при каждом обновлении.
    если данные каким-то образом нужно менять - тот кто меняет пишет необходимые скрипты для сохранения данных.


    Кто имел с этим EMS дело?

  • phpdude

    Сообщения: 26614 Репутация: N Группа: в ухо

    Spritz 25 февраля 2009 г. 8:48, спустя 48 минут 20 секунд

    vasa_c, хотелось бы этого парня потрогать
    Сапожник без сапог
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 25 февраля 2009 г. 8:52, спустя 3 минуты 30 секунд

    Ну, как обозначено - Psih с php.ru.
    Насчёт потрогать не знаю, а написать можно )

Пожалуйста, авторизуйтесь, чтобы написать комментарий!