Резервное копирование сайта при помощи Rsync на Centos 6

Данное руководство поможет быстро создать резервные копии наиболее общих компонентов виртуального выделенного сервера, а именно файлов сайта и БД. В руководстве показано, как настроить ежедневное резервное копирование off-site (то есть, на другой удалённый сервер), а также как использовать rsync для инкрементного копирования. Для выполнения описанных здесь действий понадобится rsync, cron и несколько простых команд bash. В качестве примера для бэкапа будет использоваться WordPress (инструкции по установке можно найти здесь); предполагается, что WordPress находится в каталоге /var/www/wordpress, а БД MySQL называется wordpress.

Примечание: Замените эти условные данные своими значениями.

Резервное копирование бывает полным (копирует все данные) и инкрементным (копирует только изменения с момента последнего обновления бэкапа).

Полный бэкап

Создание архива

Итак, необходимые данные хранятся в каталоге /var/www/wordpress. Создайте каталог для резервного копирования:

mkdir -p /backup/wordpress

Чтобы создать полную резервную копию данных, используйте инструмент tar.

tar -czf /backup/wordpress/initial_backup.tar.gz
/var/www/wordpress

Этот инструмент создаст gzip-архив в файле initial_backup.tar.gz; флаг -czf значит create, gzip и file. Можно также добавить флаг v (-czvf), чтобы получить расширенный вывод.

Из названии файла для бэкапа следует, что эта начальная копия (initial backup) была заархивирована при помощи tar в формате gzip.

Инструмент tar может копировать несколько точек системы:

tar -czf /backup/cms_systems_backup.tar.gz /var/www/wordpress
/var/www/drupal /var/www/joomla

Эта команда создаст бэкап всех установленных CMS.

Для удобства управления резервными копиями в название файла можно добавить дату создания копии:

tar -czf /backup/wordpress/wordpress-`date '+%m%d%y'`.tar.gz
/var/www/wordpress

Результат:

[root@Backup ~]# ls -l /backup/wordpress/
total 9760
-rw-r--r-- 1 root root 4995743 Apr 17 12:16 initial_backup.tar.gz
-rw-r--r-- 1 root root 4995743 Apr 17 12:25 wordpress-041713.tar.gz
[root@Backup ~]#

Теперь на сервере есть два файла: initial_backup.tar.gz и wordpress-041715.tar.gz (где 041715 – дата создания копии).

Теперь можно настроить ежедневное резервное копирование при помощи crontab (это планировщик задач Linux). Откройте crontab:

EDITOR=nano crontab -e

Для примера настройте автоматическое резервное копирование в 3.30 утра (поскольку в это время трафик, как правило, небольшой). Кроме того, cron может сообщить результаты по электронной почте. Добавьте в crontab:

MAILTO=email@example.com
30 3 * * * /bin/tar -czf /backup/wordpress/wordpress-`date
+\%m\%d\%y`.tar.gz /var/www/wordpress

Сохраните и закройте файл.

Итак, теперь каждый день в 3.30 утра система будет выполнять бэкап данных, а затем отправлять результаты по электронной почте. В случае ошибки в сообщение будет содержать инструкции по её устранению.

Копирование бэкапа на удаленный сервер

Чтобы скопировать резервные копии данных на другой удалённый сервер, используйте scp. Сначала создайте SSH-ключ:

ssh-keygen

Можно не создавать пароль для ключа и использовать файл ключей /root/.ssh/id_rsa_backup (или /home/username/.ssh/id_rsa_backup, если текущий пользователь не root). Проверьте открытый ключ:

cat .ssh/id_rsa_backup.pub

Скопируйте открытый SSH-ключ на удалённый сервер в файл authorized_keys. Предполагается, что у вас уже есть заранее подготовленный виртуальный выделенный сервер по имени backup.example.com и пользователь backup.

scp .ssh/id_rsa_backup.pub
backup@backup.example.com:/home/backup/backup_key.pub

Будет запрошен пароль пользователя backup. Теперь ключ скопирован и его нужно переместить в authorized_keys. Чтобы создать такой файл, введите:

ssh backup@backup.example.com "mkdir -p /home/backup/.ssh"
ssh backup@backup.example.com "chmod 700 /home/backup/.ssh"
ssh backup@backup.example.com "touch /home/backup/.ssh/authorized_keys"
ssh backup@backup.example.com "chmod 600 /home/backup/.ssh/authorized_keys"
ssh backup@backup.example.com "mkdir -p /home/backup/backups"

Эти команды создадут каталог и файл authorized_keys (если таковых ещё не существует), необходимый для перемещения резервных копий. Файлы можно хранить в каталоге backups. Нужно скопировать открытый ключ в этот каталог:

ssh backup@backup.example.com "cat /home/backup/backup_key.pub >>
/home/backup/.ssh/authorized_keys"

В дальнейшем этот ключ можно использовать для обмена данными.

Скопируйте файл бэкапа на удалённый сервер:

scp -i .ssh/id_rsa_backup
/backup/wordpress/wordpress-041713.tar.gz
backup@backup.example.com:/home/backup/backups

Если ключ был установлен правильно, то файл будет скопирован без запроса пароля. Убедитесь, что файл перемещен:

ssh backup@backup.example.com "ls -l /home/backup/backups"

Теперь можно автоматизировать перемещение резервных копий на удалённый сервер при помощи crontab.

EDITOR=nano crontab -e

Добавьте в настройки бэкапа команды, которые скопируют созданный архив.

30 3 * * * /bin/tar -czf /backup/wordpress/wordpress-`date
+\%m\%d\%y`.tar.gz /var/www/wordpress;/usr/bin/scp -i
/root/.ssh/id_rsa_backup /backup/wordpress/wordpress-`date
+\%m\%d\%y`.tar.gz
backup@backup.example.com:/home/backup/backups

Примечание: Это не самый надёжный способ автоматизировать эту задачу. Для автоматизации копирования бэкапа рекомендуется создать скрипт, а затем запланировать его запуск. Данный метод используется в руководстве для краткости и простоты.

Инкрементное резервное копирование

Что если на удалённом сервере тоже есть программное обеспечение для резервного копирования? В таком случае можно просто синхронизировать данные двух серверов и настроить один из них для выполнения резервного копирования. Кроме того, можно сохранить файлы с отметками. Для этого используется rsync.

Данный раздел покажет, как при помощи rsync создать инкрементную резервную копию каталога var/www/wordpress и поместить её в каталог /home/backup/snapshots/wordpress на удаленном сервере.

Для этого запустите:

ssh backup@backup.example.com "mkdir -p /home/backup/sync"
rsync -avz --delete -e "ssh -i /root/.ssh/id_rsa_backup"
/var/www/wordpress backup@backup.example.com:/home/backup/sync

Первая команда создаёт каталог для хранения копии, а вторая копирует в него изменённые файлы (отредактированные, созданные, удалённые). Чтобы запланировать этот бэкап, откройте cron:

EDITOR=nano crontab -e

Добавьте в файл следующие настройки:

30 3 * * * /usr/bin/rsync -avz --delete -e "ssh -i
/root/.ssh/id_rsa_backup" /var/www/wordpress
backup@backup.example.com:/home/backup/sync

Резервное копирование БД

Примечание: Согласно предложенному ранее руководству по установке WordPress, БД называется wordpress, пользователь – wordpressuser, пароль – password. Замените эти условные данные своими данными.

Создайте дамп данных.

mkdir /backup/mysql
mysqldump < wordpress -u wordpressuser -ppassword | gzip >
/backup/mysql/initial.sql.gz

Эта команда создаёт SQL-файл initial.sql.gz. Чтобы запланировать бэкап БД, откройте cron и добавьте такие настройки:

0 4 * * * /usr/bin/mysqldump < wordpress -u wordpressuser
-ppassword | /bin/gzip > /backup/mysql/mysql--`date +\%m\%d\%y`.sql.gz

Чтобы переместить дамп на удалённый сервер, добавьте в cron scp или rsync:

0 4 * * * /usr/bin/mysqldump < wordpress -u wordpressuser
-ppassword | /bin/gzip > /backup/mysql/mysql-`date +\%m\%d\%y`.sql.gz;
/usr/bin/scp -i /root/.ssh/id_rsa_backup /backup/mysql/mysql-`date
+\%m\%d\%y`.sql.gz  backup@backup.example.com:/home/backup/

Tags: , ,

1 комментарий

Добавить комментарий