Назад | Перейти на главную страницу

Rsync похож на подрывную деятельность, но для сервера?

Я пытаюсь научиться пользоваться rsync. Я хочу создавать ежедневные резервные копии своего рабочего сервера.

Прямо сейчас запускаю команду

rsync -azr /var/www/* www-data@backup.server.com:/var/www

Теперь предположим, что однажды я хочу откатить каталог / var / www / на моем производственном сервере до версии прошлого месяца. Как мне сказать rsync получить версию N?

Прочитав, что rsync копирует только различия между src и dest, я предположил, что rsync работает как subversion, когда вы фиксируете изменения в месте назначения и отслеживаете каждую версию, а также с возможностью проверить любую версию в любое время. Так работает rsync? Это как подрывная деятельность, но для всего сервера? Это было бы здорово, потому что тогда мне не нужно делать полные копии ssh для моих ночных резервных копий.

rsync не является системой контроля версий. Он работает с голыми объектами файловой системы и при необходимости добавляет, обновляет и удаляет их напрямую. Другие инструменты могут добавлять какое-то управление версиями, но нет возможности откатиться с помощью rsync.

rsync отражает вашу текущую файловую структуру с другой стороны. Он отправляет только различия в файлах, но не сохраняет исправления.

http://blog.interlinked.org/tutorials/rsync_time_machine.html

может быть ближе к тому, чем вы хотите заниматься. Для менее "ручного" метода http://rsnapshot.org/

С помощью небольшого количества клея из Bash в вашем скрипте вы можете делать ежедневное инкрементное резервное копирование; Я использую модифицированную версию этого скрипта для резервного копирования файлов сервера разработки: http://samba.anu.edu.au/rsync/examples.html

Я делаю резервную копию, используя следующие варианты:


      -avP --stats --compress \
      --delete \
      -b --backup-dir ${DIRBACKUPBACKUP} \
      --bwlimit=20 \
      --include=/etc/ \
      --include=/etc/** \
      --include=/var/ \
      --include=/var/vmail/ \
      --include=/var/vmail/** \
      --exclude=* \
      root@www.mydomain.com:/

где ${DIRBACKUPBACKUP} - уникальное имя каталога (я использую текущую дату и время).

Нет автоматического способа восстановления, но я смогу восстановить, как каталог выглядел в любой конкретный день, используя эти параметры.

Если ваша цель - иметь возможность откатить код к другому периоду времени, было бы разумно сохранить его в репозитории Subversion и использовать что-то вроде Capistrano чтобы проверить это для тестирования / производства.

С помощью Capistrano мои разработчики могут отправлять нашей группе контроля качества по электронной почте тег и номер версии PHP-приложения, которое они хотят развернуть для тестирования. QA может отредактировать файл Capistrano, включив эту версию и тег, а затем запустить ENVIRONMENT=testing;cap deploy. Capistrano войдет на наши тестовые серверы и развернет эту версию кода в соответствии с рецептом, который я для них написал.

Переход в производство - тот же процесс, но мы установили ENVIRONMENT=production

Если вам нужно вернуться к предыдущей версии, вы можете запустить cap rollback для данной среды, и Capistrano войдет на сервер и укажет код на предыдущую версию, которая была установлена ​​из Subversion.

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

Раньше я помещал свои / etc и / var / www в репозиторий svn для быстрого возврата и использовал tar для инкрементных и полных резервных копий.

Rsync по умолчанию просто гарантирует, что два каталога синхронизированы, но, как указывали другие, вы можете создать скрипт, чтобы он имел символические (или жесткие) ссылки на более старые резервные копии, если файлы не изменились.

Нет причин, по которым вы не можете использовать оба.