Speak.Me Учить иностранные слова

BackUp linux cервера

Ниже хочу поделиться своими изысканиями на тему резервного копирования данных веб-проектов, размещенных на облачном сервере под управлением linux-системы (в моем случае, Debian Squeeze).

Для меня такой хостинг наиболее удачен, поскольку дает полный контроль над системой. Но есть и свои минусы, один из них состоит в том, что администрировать облачный сервер приходится самому. И среди прочего нужно позаботиться о создании резервных копий системы (в целом и/или отдельных ее частей) на случай краха облака (что, как показала практика, случается не редко).

Для начала нужно решить что будем архивировать. Я остановился на том, что что делать резервную копию всей системы по расписанию не целесообразно: изменяется она не так часто, а времени и ресурсов системы на такую архивацию затрачиваться будет много. Можно делать ее вручную, скажем после того как что-либо доставим или снесем. Например, так:

Ну и скопировать архив к себе на комп, на другой сервер или кому куда удобнее.

Но есть данные, которые меняются довольно часто, поэтому целесообразно делать их резервные копии по чаще, ну и соответственно не в ручную (потому как утомительно и точно забудешь сделать как раз перед падением системы). Для меня это база банных, файлы веб-сайтов и настройки системы. Расположено все это у меня в трех директориях:

  1. /web — файлы веб-сайтов, по умолчанию это /var/www
  2. /mysql_data — база данных; по умолчанию /var/lib/mysql
  3. /etc — настройки системы

Все это добро и будем спасать. У вас, конечно, набор может быть другим.

Передо мной стояло две основных цели: во-первых, сделать процесс автоматическим, для этого мы будем использовать скрипт запускаемый кроном, во-вторых, архивы должны храниться не в облаке, для этого будем использовать облачные хранилища. Я остановил свой выбор на Яндекс.Диск, потому как он поддерживает необходимые технологии, больше всех предоставляет бесплатного дискового пространства, ну и скорость. Но при желании можно воспользоваться любым другим сервисом, поддерживающим протокол WebDAV. Как вариант я рассматривал отправку архивов на почту, но быстро отбросил эту идею, т.к. у большинства почтовых сервисов есть ограничения на предельный размер вложения, и при разрастании проектов этот предел очень легко превзойти.

Начну, как раз с последнего, с Яндекс.Диска и как его настроить для нужных нам целей. Для начала если у кого-то нет аккаунта на Яндексе, его нужно сделать. Далее в почте идем на вкладку Диск (https://mail.yandex.ru/#disk/tab). При желании здесь можно увеличить объем и поудалять ненужные папки. Далее создаем папку, например, Backup (ну или можно в корень складывать архивы).

Взаимодействовать наш сервер с Яндекс.Диском будет с помощью утилиты davfs2 работающей по протоколу WebDAV. Поэтому устанавливаем утилиту:

Утилите необходимо сообщить логин и пароль от Яндекс.Диска (точнее вашего аккаунта на Яндексе), чтоб каждый раз не вводить вручную. Открываем файл /etc/davfs2/secrets в вашем любимом редакторе и в конце файла дописываем:

Создаем папку, в которую будет монтироваться Яндекс.Диск (название можно любое):

И монтируем диск:

После этого Яндекс.Диск готов к использованию, к нему можно обращаться как к обычной директории. Что бы диск монтировался автоматически при старте системы можно добавить вышеуказанную команду в скрипт /etc/rc.local.

А мы переходим к написанию скрипта архивации. Создаем файл скрипта, например, /sh/web_backup.sh, делаем его исполняемым и открываем в вашем любимом редакторе.

Скрипт полностью:

Теперь построчно. Для того, чтобы во время архивации не возникло никаких конфликтов из-за обращения к файлам других программ, останавливаем сервер mysql и apache:

Если этого не сделать, то есть риск получить поврежденные данные в архиве.

Далее затариваем наши три директории:

Хотя Яндекс.Диск работает довольно быстро (для России) по сравнению с аналогами, архивировать напрямую в него лучше не стоит: как минимум процесс архивации может затянуть, а не забываем, что apache и mysql у нас выключены и сайты не доступны пользователям. Поэтому складываем наши архивы куда-либо внутри сервер (у меня директория /backup).

После этого можно запустить apache и mysql:

И далее просто перемещаем наши архива на Яндекс.Диск:

Ну и наконец, нужно добавить наш скрипт в cron. Открываем crontab, например, так:

Главное случайно не запустить crontab с параметром -r: это удалит все задания для cron). Команда запустит редактор vi. Перемещаем курсор стрелочками на клавиатуре на последнюю строку и добавляем команду:

Чтобы сохранить изменения нажимаем Ctrl+O, затем для выхода из редактора Ctrl+X. Можно проверить, что все сохранилось, выведя список всех cron-задач командой:

Те, кто плохо дружит с vi могут открыть в своем любимом редакторе файл /etc/crontab, но здесь строчка будет несколько отличаться:

Эта строка будет запускать наш скрипт в 0 часов 0 минут каждый день. Вообще команды крон имеют следующий формат:

Минуты, часы, число, месяц и день недели задаются числами. Если вместо числа поставить звездочку (*), команда будет выполняться соответственно каждую минут, час, любого числа, каждый месяц, в любой день недели.

Тем, кто захочет вместо записи архивов на Яндекс.Диск отправлять их на почту, нужно будет проинсталировать mail:

или:
А отправить файл с архивом на почту можно такой командой:

Обсуждение закрыто.