Всем привет!
Хочу поделится проблемой которая существует в нашей компании, и узнать возможные пути ее решения.
Проблема заключается в синхронизации между рабочими машинами MySQL запросов.
Объясню подробней.
В нашем офисе работает N (пример 5) программистов, примерно, такое же количество программистов работает на удаленке + штатные разработчики могут работать дома. Посчитаем примерное количество локальных виртуальных серверов: 5 (на офисе) + 5 (удаленка) + 5 (офисные работники работают дома) = 15 машин.
Вся наша работа сваливается (через GIT) на какой-то pre-production сервер, назовем его site.alpha. Как синхронизировать версионность исходников проекта мы разобрались, уже около года успешно работаем с GIT. А вот как синхронизировать MySQL-запросы - не понятно.
Сейчас все это дело происходит по следующей схеме. Если мне нужно внести какие-то изменения в структуру БД, я выполняю запрос у себя на локальной машине и копирую его в некий файл Patch.sql, который потом сливаю в GIT. Далее, мои коллеги, если замечают какие-то изменения в файл-патче БД, они выполняют запрос у себя на машине и дописывают в файл-патч что-то типа:
-- 06.02.13 11:05 Roman Ivanov romanivanov@gmail.com Work
-- 06.02.13 11:05 Boris Petrov boris.petrov@gmail.com Home
....
Т.е., в комментариях к запросу мы ведем некий лог их (запросов) выполнения каждым разработчиком. Жесть, да?! Проблема усложняется еще и тем, что старшему разработчику нужно постоянно следить за этими логами, и после выполнения запроса всеми разработчиками - выполнить этот же запрос на site.alpha.
Сейчас у нас этот Patch.sql уже занимает несколько сотен МБ.
Вот хотел спросить: как вы решаете проблему в своей компании?
P.S. Про репликацию, конечно, слышал, но мне кажется, это немного не то, что нам нужно. А нужно следующее. Какой-то master-slave скрипт, который будет следить за состоянием локальной базы (slave) и центральной (master). В случае если на slave БД что-то изменилось, он составляет запрос которым нужно проапдейтить master и остальные slave и отправляет его по всем остальным серверам, или сгружает все на master, а slave-ы других локальных серверов мониторят непосредственно master и забирают от-туда себе запросы, тем самым обновляя самих себя.
Фух... Выговорился.