Как мы все знаем контроль версий позволяет нам получить программу любой версии (за любую дату), так сказать увидеть какой был код программы в тот или иной момент времени.
Вот было бы интересно узнать — есть ли что-то подобное для сайтов? Т.е. хотелось бы иметь возможность увидеть каким был мой сайт в любой момент времени.
Скажем drupal — состоит из програмной части (разработчики drupal его держат под контролем версий в общем-то)
+ плагинов (тот же код фактически — под контроль версий положить не проблема)
+ контента пользовательского вместе с его настройками (тут как я понял непросто)
По идеи задача сводится к тому чтобы под контролем версий была база данных mySQL.
А может это делается путем отказа от MySQL в пользу какой-либо более продвинутой системы?
Буду рад любым мыслям на эту тему.
Upd. Видимо SQL база данных с поддержкой контроля версий было бы самым красивым решением. Есть ли такие вообще?
1. Делаете дамп базы.
2. Включаете query log базы данных.
3. При каждом изменении лога (или в определенные промежутки времени) делаете коммиты.
4. Периодически делаете новый дамп базы, очищаете лог и коммитите это.
Для восстановления к определенному состоянию:
1. Восстанавливаете через систему контроля версий все файлы, включая дамп и лог.
2. Загружаете дамп в базу.
3. Выполняете query log.
В итоге база приводится к состоянию на нужный момент.
Для структуры базы данных всё очень просто. Вы помещаете sql скрипт создания базы под SVN и тогда любые изменения в ДБ должны идти через этот файл. Также в SVN можно хранить последовательные SQL скрипты, которые непосредствено изменяют ДБ: alter, update и др.
Ну есть очевидный вариант: запоминать все изменяющие базу запросы и применять их на первый бэкап, сделанный раньше нужной даты. По сути запрос это и есть дифф, а его выполнение является коммитом.
При большом количестве модифицирующих запросов малоприменимо, естественно.
Ну если у Вас сайт не очень большого объема, то можно просто поставить крон, который делает своего рода бэкапы с определенной периодичностью и просто хранить файлы включая файлы баз данных. А вот если же сайт большого объема (типа файл шеринга), тут уже посложнее. В этом случае можно будет просто написать такую программку которая сохраняет в новый архив только новые и обновленные файлы (например путем исключения по дате изменения файла относительно последней версии бэкапа)
крон — не совсем то — ведь изменения сайта могут быть между запусками крона, впрочем как и изменений может не быть несколько запусков крона. Для svn и комиченного в него текста никто ведь не делает собирание по крону комитов…
Написать программулинку это, конечно, прикольно, только хотелось бы посмотреть на возможные готовые решения до изобретения велосипеда.
Сомневаюсь, что существую такие базы данных. В MySQL и PostgreSQL такого точно нет. Вам правильно предложили, необходимо либо хранить лог всех запросов к базе, другого решения нет, если вам важна возможность увидеть буквально любое изменение.
Или перейти с Drupal на что-либо более продвинутое. Например, для Django существует несколько приложений, реализующих версионирование.
если речь о drupal, то drush вам в помощь.
как управлять версиями исходников модулей, описано тут, как бэкапить БД написано у него же в документации (бэкап подключается к управлению версиями достаточно просто).