Материал просмотрен 946 раз(а)

В связи с последними событиями (обнаружение вредоносного кода на сайте WordPress) я решил всерьёз вычистить все и поактивнее продумать процедуры резервного копирования. Так, на всякий случай.

Не лишне будет напомнить мою любимую поговорку “Админы бывают двух видов: те, кто пока ещё не делает резервные копии и те, кто уже делают”. Если сервак крутится на Windows-системе (например Win2k8, с Апачем или IIS, хоть и не люблю его), то шикарно подойдут средства резервного копирования от acronis.

У меня же немножко другая ситуация. Сей сайт хостится на VPS с операционкой Linux, где, впрочем, резервное копирование весьма продумано. Я люблю стандартные способы, поэтому не буду ставить какие-то особые утилиты (не скрою, есть удобные решения), а постараюсь обойтись штатными средствами.

SSH

SSH

Итак, что мне нужно:

  1. Сделать дамп mysql базы сайта;
  2. Синхронизировать файлы сайта с каталогом резервной копии;
  3. Запаковать каталог резервной копии в архив;
  4. Выкачать архив на сервер, где места побольше;

Ну опишу каждый пункт поподробнее.

Итак, создаем файлик 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 залогиниться можно без пароля.