Задать вопрос

Как синхронизировать только структуру БД?

Я занимаюсь разработкой сайтов на PHP+MySQL. Работаю удаленно и с разных машин, на каждой из которых поднят локальный LAMP-сервер. Плюс удаленный рабочий сервер.

С синхронизацией скриптов проблем нет: GIT и скрипты развертывания удовлетворяют все мои нужды. Хочется иметь такие же инструменты для структуры таблиц MySQL.

Приведу пример проблемы. Работая над некоторым сайтом, я многократно изменяю структуру локальной БД, содержащей тестовые данные. В конце рабочего дня я обновляю скрипты и судорожно пытаюсь вспомнить, какие же изменения я внес днем в локальную БД, чтобы в точности воспроизвести их на БД работающего сайта с актуальной информацией. Через пару недель я уезжаю в командировку и продолжаю работать с нетбука, локальная БД которого безнадежно устарела и я уже не помню, что в ней надо поменять. Снять полный дамп с рабочего сервера не всегда удобно.

Наверное, мне нужна программа, которая бы для двух дампов структуры БД умела построить дифф и сделать из этого диффа набор SQL-команд (ALTER TABLE и т. п.) для приведения БД одной структуры к другой. Такой софт существует?
  • Вопрос задан
  • 4790 просмотров
Подписаться 12 Оценить 3 комментария
Пригласить эксперта
Ответы на вопрос 10
Devart dbForge Studio for MySQL — бесплатная программа. Может синхронизировать как данные в таблицах, так и только саму структуру
Ответ написан
script88
@script88
paste.org.ru/?z2e4ud
P.S. по привычке нажал написать :)
Ответ написан
script88
@script88
Скриптец Вам в помощь
Ответ написан
Комментировать
@gleb_kudr
А написать генератор и все изменения вести через него, нет?
Ответ написан
Ramzeska
@Ramzeska
Делал давно такую штуку для автообновления движка, может пригодится пара функций:
pastebin.com/qRRQyEyJ
Ответ написан
Комментировать
Inori
@Inori
Точно знаю что у Doctrine ORM есть расширение для миграций — аналог Рельсовых, о которых drakmail писал, но автору вряд-ли это поможет.

В общем, ищите проекты по ключевому слову migrations.
Например, быстрый поиск на гитхабе привел к этому проекту.
Ответ написан
Комментировать
@egorinsk
Извечная проблема деплоймента. Если сайт небольшой и не-частообновляемый, то проще всего скачать ночью live базу, внести изменения, залить обратно.

Если сайт большой, то пишут миграции — код, который апгрейдит/даунгрейдит базу с версии N на версию N + 1, также пишется скрипт, который смотрит версию БД и применяет нужные миграции.

Но этот вариант, на мой взгляд, плох, так как код миграций надо писать руками, и это сомнительное удовольствие. Я же и так базу ковыряю запросами, почему миграции не генерировать как-то автоматически? Зачем делать все по 2 раза? А вот спросите у любителей Руби, почему им нравится делать все одну и ту же работу 2 раза.
Ответ написан
Миграции. Тем более сейчас большинство механизмов / фреймворков двигаются в этом направлении.

Если данные тестовые, то можно вести один скрипт, в котором вести учет базы и его туда же… в git в смысле.

Насчет софта, дифов и прочего — как вам уже советовали — вы сразу все изменения пишите в sql файл. Если я понимаю, что много в базе буду менять, то завожу sql с названием дня и туда все запросы пишу сразу.
Ответ написан
Комментировать
Aminuofu
@Aminuofu
Для подобных целей можно использовать удаленный тестовый сервер. Деплоить на рабочий сервер с помощью Mercurial/Git и миграций.

Плюсы такого подхода:
— все в одном месте (файлы, базы данных), нет проблем с синхронизацией
— нет необходимости поднимать LAMP на всех компьютерах/ноутбуках/нетбуках
— два предыдущих пункта дают значительную экономию времени

Минусы:
— за удаленный тестовый сервер обычно надо платить, хотя это и недорого (например, на Селектеле у меня такая машинка расходует 275 руб./месяц) и в конечном счете окупается (см. плюсы)
— теоретически возможны сбои у хостинг-провайдера, но у меня на тестовом сервере такого не случалось
Ответ написан
lumega
@lumega
есть платная софтина EMS SQL Management Studio или часть ее DB Comparer for MySQL.
там как раз можно делать сравнения структур и делать дампы обновлений.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы