В связи с последними событиями (обнаружение вредоносного кода на сайте WordPress) я решил всерьёз вычистить все и поактивнее продумать процедуры резервного копирования. Так, на всякий случай.
Не лишне будет напомнить мою любимую поговорку “Админы бывают двух видов: те, кто пока ещё не делает резервные копии и те, кто уже делают”. Если сервак крутится на Windows-системе (например Win2k8, с Апачем или IIS, хоть и не люблю его), то шикарно подойдут средства резервного копирования от acronis.
У меня же немножко другая ситуация. Сей сайт хостится на VPS с операционкой Linux, где, впрочем, резервное копирование весьма продумано. Я люблю стандартные способы, поэтому не буду ставить какие-то особые утилиты (не скрою, есть удобные решения), а постараюсь обойтись штатными средствами.
Итак, что мне нужно:
- Сделать дамп mysql базы сайта;
- Синхронизировать файлы сайта с каталогом резервной копии;
- Запаковать каталог резервной копии в архив;
- Выкачать архив на сервер, где места побольше;
Ну опишу каждый пункт поподробнее.
Итак, создаем файлик backup.sh на хостинге с примерно таким содержимым:
#!/bin/bash
rsync -av "/path/to/site/" "/path/to/backup/"
mysqldump -uusername -ppassword db_name > "/path/to/backup/db_name.sql"
tar cvzf "/path/to/backup/D-`date +%Y-%m-%d`.tar.gz" "/path/to/backup/"
find "/path/to/backup/" -mtime +5 -type f -name "*.gz" -delete
Думаю, всё тут предельно понятно. Синхронизирую каталоги. Делаю дамп. Пакую в архив с пометкой D-(дата).tar.gz, удаляю все архивы старше 5 дней. Иначе свободное место на хостинге забивается очень быстро.
Далее, этот файл кидаю в crontab -e
(делаю запись)
0 4 * * * /path/to/backup.sh
для того, чтобы скрипт запускался в 4 ночи каждый день.
Всё бы хорошо, но теперь катастрофически уменьшается свободное место. Да и не бэкапы это, если хранятся на самом сервере. Поэтому будем их выкачивать. Для этого у меня есть неплохой шлюз с белым IP на FreeBSD 8.2, на котором я создаю свой файлик backup.sh с содержимым:
#!/bin/sh
cd /usr/home/backup/
scp sshuser@myvdshosting:~/path/to/backup/D-`date +%Y-%m-%d`.tar.gz .
Таким образом мы по протоколу ssh передаем файл с удаленного сервера (хостинга) к себе на шлюз, где места побольше. Этот файл я кинул в крон на 2 раза в неделю. Этого хватит, чтобы копии хранились не на резервируемом сервере.
Вообще, думаю, все бэкапы (разных сервисов) лить в одну папку и выкачивать её содержимое еженедельно.
Кстати, для того, чтобы работала утилита scp без запроса пароля ssh-юзера, нужно будет заранее сгенерировать открытый ключ. Как это сделать – я рассказывал тут. Теперь и по ssh залогиниться можно без пароля.
Comments: