В статье "MYSQL. Бэкап базы по расписанию" рассказывал как сделать резервную копию базы данных. Рекомендую прочитать прошлую статью, потому что в этот раз рассмотрим схожие методы бэкапа файлов по расписанию через планировщик cron.
Современные системы хранения данных имеют высокую надёжность. Но всегда лучше перестраховаться и сделать бэкап. На моей памяти, примерно в 2008 году, хостинг ValueHost объявил о безвозвратной потере данных всех баз данных сайтов. В том числе и базы моего сайта. Тогда был потерян не один килограмм волос у тех системных администраторов, кто не делал бэкапов.
Как хранить бэкапы
При бэкапе сайта стоит сохранять не только базу данных, но и все файлы. Мало ли что случится.
Бэкапы - это дело крайне полезное, но нудное. Поэтому лучше настроить автоматический бэкап сайта раз в неделю. И сделать это так, чтобы файлы бэкапов сами упаковывались в архивы и сортировались по папкам с датами. Далее опишу как настроить бэкапы так, чтобы архивы с базой и файлами сами организовывались по папкам:
Бэкап сайта по расписанию
Для бэкапа всего сайта необходимо сохранить базу данных и файлы. А чтобы подобные действия повторялись периодически, надо запланировать их через cron. К примеру, на этом сервере, в файле /etc/crontab содержатся следующие три строки, которые делают всё вышеперечисленное:
0 0 */7 * * root mkdir -p /root/alexgur.ru/$(date +\%Y\%m\%d)/
0 0 */7 * * root mysqldump -u USER --password='PASS' -h localhost --databases DB | gzip > /root/alexgur.ru/$(date +\%Y\%m\%d)/db.sql.gz
0 0 */7 * * root tar -zcf /root/alexgur.ru/$(date +\%Y\%m\%d)/files.tar.gz /wordpress/alexgur.ru
Первая инструкция создаёт папку, где хранится бэкап. Вторая сохраняет базу данных. Третья архивирует все файлы сайта.
Все эти инструкции объединяет дата запуска. Цифры со звёздочками в начале строки "0 0 */7 * *" - означают, что инструкция должна выполняться один раз в неделю. Но все инструкции в файле cron выполняются последовательно, поэтому есть возможность построить систему организации бекапов по файлам.
Рассмотрим каждую строку последовательно.
Создание папки для бэкапов
Первая строка создаёт папку, куда будет сохранён архив с файлами сайта и бэкап базы. Папка создаётся с названием из сегодняшней даты "годмесяцдень":
mkdir -p /root/alexgur.ru/$(date +\%Y\%m\%d)/
Такое название папок удобно для сортировки. Если отсортировать папки по имени, то они автоматически упорядочатся по дате создания. Описание функции для создания папок mkdir можно найти в статье "Linux создать папку". Скажу лишь что ключ "-p" нужен для того, чтобы можно было создать все несуществующие папки в пути, а не только на последнем уровне. Т.е. если папки "/root/alexgur.ru/" не существует, то она создастся.
Бэкап базы
Содержание этой строки было подробно разобранов в статье "MYSQL. Бэкап базы по расписанию":
mysqldump -u USER --password='PASS' -h localhost --databases DB | gzip > /root/alexgur.ru/$(date +\%Y\%m\%d)/db.sql.gz
Эта команда делает бэкап базы DB, упаковывает в архив и сохраняет в папку с нужным числом, которая была создана на предыдущем шаге.
Бэкап файлов
Для создания архива из файлов сайта используется следующая команда:
tar -zcf /root/alexgur.ru/$(date +\%Y\%m\%d)/files.tar.gz /wordpress/alexgur.ru
Описание команды tar и ключей "zcf" можно найти в статье "Linux tar запаковать".
При такой архивации сохраняется вся папка с сайтом, все файлы, которые находятся внутри папки "/wordpress/alexgur.ru" . Но помимо важных файлов, без которых сайт не может работать, есть ещё и "мусор". К примеру, файлы кэша которые создаются во время работы сайта. Утеря кеш файлов не влечёт никакого ущерба функциональности сайта. Но их наличие в архиве бэкапа может сильно повлиять на его объём. К сожалению, плохо знаком с WordPress, поэтому не рискую исключать кеш из папок.
Зачем делать бэкапы
Описанный способ создания бэкапов хорош тем, что работает на любых CMS. Ведь можно перейти с wordpress на bitrix или joomla, но суть бэкапа сайта останется прежней: сохранение базы и файлов.