Резервное копирование с помощью Cron

Данная статья поможет настроить планировщик задач таким образом, чтобы он создавал резервные копии баз данных и данных Вашего VPS для сайтов.

Рассмотрим пример записи:
30 2 * * 1 root tar -czf /root/backups/sites.tar.gz /var/www

Эта строка будет архивировать директорию /var/www, где в большинстве конфигураций размещены все данные сайтов, и создавать архив в /root/backups. Команда будет выполняться по понедельникам в 2:30. Однако у данного метода создания резервных копий данных сайта есть существенный минус: бекапы будут создаваться до тех пор, пока на ВПС не закончится место на жестком диске. Для решения данной проблемы необходимо написать скрипт, который позволит сохранять не более 4-х копий архивов.

Бекап данных сайтов

Итак, для запуска бекапа данных сайта заходим на ВПС с помощью SFTP от имени root пользователя. В рабочей директории (/root) создаем папку ./backup/www-backup в которой будут расположены резервные копии. В папке /root/backup создаем скрипт, который будет запускать планировщик cron для создания резервных копий. Создаем новый файл, называем его www-backup.sh , открываем текстовым редактором и записываем в него сам код скрипта:

#!/bin/bash
cd /root/backup/www-backup
rm ./www-dump-3.tar.gz
mv www-dump-2.tar.gz www-dump-3.tar.gz
mv www-dump-1.tar.gz www-dump-2.tar.gz
mv www-dump-0.tar.gz www-dump-1.tar.gz
tar -czf www-dump-0.tar.gz /var/www 

Обратите внимание, что в конце скрипта необходимо наличие отступа.

Либо качаем готовый скрипт www-backup.sh ОТСЮДА и заливаем в /root/backup.
Данный скрипт позволяет нам создать резервные копии данных сайта и хранить 4 версии бекапа, однако он не архивирует базы данных.

Хочу backup всего VPS!

Бекап баз данных

Для архивации Базы Данных создаем файлик mysql-backup.sh в директории /root/backup . В данном файле размещаем следующий скрипт:


#!/bin/bash
cd /root/backup/sql-backup
rm ./sql-dump-3.gz
mv sql-dump-2.gz sql-dump-3.gz
mv sql-dump-1.gz sql-dump-2.gz
mv sql-dump-0.gz sql-dump-1.gz
mysqldump --opt -uroot –p yoursqlpassword --all-databases | gzip -c -9 > /root/backup/sql-backup/sql-dump-0.gz


Обратите внимание, что в конце скрипта необходимо наличие отступа.

Также можно скачать готовый скрипт mysql-backup.sh ОТСЮДА и залить в /root/backup.
Обратите внимание, что необходимо заменить yoursqlpassword на Ваш root пароль для доступа к БД.

Результат создания скриптов

Создание 2-х различных скриптов для бекапа сайтов и баз данных дает нам возможность запускать данные скрипты в различные интервалы времени. То есть, если обычно достаточно создавать резервные копии сайта раз в неделю, то базы данных желательно архивировать ежедневно.
После того, как в директории /root/backup созданы скрипты для создания бэкапов базы данных и файлов сайта (www-backup.sh и mysql-backup.sh) мы добавляем задание на архивацию в crontab-файл. Открываем /etc/crontab и дописываем следующие строчки:

30 2 * * 1 root sh /root/backup/www-backup.sh
30 3 * * * root sh /root/backup/mysql-backup.sh 

Как Вы видите, архивирование файлов сайта будет производиться в 2:30 по понедельникам, а бэкап базы данных каждый день в 3:30. Вы можете изменить интервалы создания бэкапов самостоятельно, под Ваши нужды. Также хотим обратить внимание, что скрипты оставляют 4 последние версии архивов.
После добавления перезапускаем демон cron для применения изменений. Для ОС Debian и Ubuntu используйте команду service cron restart, для ОС Fedora и CentOS - команду service crond restart.