Давно известно, что сисадмины делятся на две категории: те, кто еще не делает бэкапы и те кто уже делает. В то время, когда одни ДЦ горят, а вторые внезапно исчезают, лучше всего принадлежать ко второй категории.
Итак, хочу поделиться опытом простого автоматического резервирования данных для чайников.
Необходимо по расписанию создавать резервные копии файлов и базы данных. Эти два процесса должны быть независимы друг от друга, потому что бэкап БД делается чаще, чем бэкап файлов (или наоборот).
Получить архивы файлов и БД на сервере в определенной папке. Архивы должны быть доступны по http-протоколу.
Так как это первый опыт написания скриптов — код может показаться кому-то слегка корявым.
Бэкап MySQL
Делает дампы всех БД, доступных для указанного пользователя.
Бэкап файлов
Добавляем в CRON от root-пользователя
/bin/sh /backup/backup.sh
/bin/sh /backup/sql.sh
Ставим нужное нам расписание
После работы этих двух скриптов мы имеем бэкапы файлов каждого пользователя по отдельности и бекап MySql.
Теперь мы можем делать с ними все что угодно: либо на стороннем сервере в другом ДЦ забирать их с помощью wget, либо (как это реализовано у меня) с помощью несложного windows-приложения, загруженного в планировщик, ежедневно скачивать бэкапы на локальную машину.
В целях безопасности в папку site.ru/backup/ советую положить следующий .htaccess
Order Deny,Allow
Deny from all
Allow from Ваш.IP.Адрес, IP.Адрес.ВПС.Если.Используете.wget
Удачи Вам, и не теряйте свои данные.
Итак, хочу поделиться опытом простого автоматического резервирования данных для чайников.
Задача
Необходимо по расписанию создавать резервные копии файлов и базы данных. Эти два процесса должны быть независимы друг от друга, потому что бэкап БД делается чаще, чем бэкап файлов (или наоборот).
Дано
- VPS на базе Centos 5 x86_64.
- Панель управления ISP Manager. Стандартные средства ISP Manager не устраивают.
- Свободного места на сервере очень мало.
Цель
Получить архивы файлов и БД на сервере в определенной папке. Архивы должны быть доступны по http-протоколу.
Решение
Так как это первый опыт написания скриптов — код может показаться кому-то слегка корявым.
Бэкап MySQL
Делает дампы всех БД, доступных для указанного пользователя.
#!/bin/sh
# ---- Константы --------------------------------------
# Папка, куда складываем бекапы
BACKUP_DIR="/var/www/wscms/data/www/site.ru/backup/"
# Имя файла бекапа
BACKUP_FILE="sql.tar"
# Пользователь, владелец файла с бекапами
USER="wscms"
# Папка для временных дампов MySQL
MDIR="mysql/"
# Сервер БД MySQL
MHOST="localhost"
# MYSQL root пользователь
MUSER="root"
# MYSQL root пароль
MPASS="***************"
# Поставьте "-zcf" если хотите сжимать данные или "-cf" в противном случае
PARAMS="-cf"
#--- Служебные переменные --------------------------
# Путь к mysql.
MYSQL="$(which mysql)"
# Путь к mysqldump
MYSQLDUMP="$(which mysqldump)"
# Путь к tar
TAR="$(which tar)"
# Путь к chown
CHOWN="$(which chown)"
# Путь к RM
RM="$(which rm)"
# Путь к MKDIR
MKDIR="$(which mkdir)"
# ---- Получаем список баз данных
DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"
# ---- Чистим папку с дампами на случай, если она уже существовала
$RM -rf $BACKUP_DIR$MDIR
# ---- Создаем папку для дампов
$MKDIR -p $BACKUP_DIR$MDIR
# ---- Делаем дампы найденых баз. Старые дампы замещаются
for db in $DBS
do
FILE=$BACKUP_DIR$MDIR$db.sql
$MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db > $FILE
done
# ---- Архивируем файлы
$TAR $PARAMS $BACKUP_DIR$BACKUP_FILE $BACKUP_DIR$MDIR
# ---- Удаляем уже не нужную нам папку с MySQL дампами
$RM -rf $BACKUP_DIR$MDIR
$CHOWN $USER $BACKUP_DIR
$CHOWN $USER $BACKUP_DIR$BACKUP_FILE
exit 0
Бэкап файлов
#!/bin/sh
# ---- Константы --------------------------------------
# Папка, куда складываем бекапы
BACKUP_DIR="/var/www/wscms/data/www/site.ru/backup/"
# Расширение файла бекапа
EXT=".tar"
# Директория, в которой лежат аккаунты
MAIN_DIR="/var/www/"
# Директория, в которой лежат сайты аккаунтов
DATA_DIR="/data/www/"
# Пользователь, владелец файла с бекапами
USER="wscms"
# Поставьте "-zcf" если хотите сжимать данные или "-cf" в противном случае
# используйте u для добавления только новых файлов
PARAMS="-cf"
#--- Служебные переменные --------------------------
# Путь к tar
TAR="$(which tar)"
# Путь к chown
CHOWN="$(which chown)"
RM="$(which rm)"
MKDIR="$(which mkdir)"
# ---- Создаем папку для дампов
$MKDIR -p $BACKUP_DIR
$CHOWN -R $USER $BACKUP_DIR
# ---- Для всех пользователей панели
for DIR in $(/usr/local/ispmgr/sbin/mgrctl -m ispmgr user | cut -d' ' -f1 | sed s/name=//)
do
# ---- Архивируем файлы
$TAR $PARAMS $BACKUP_DIR$DIR$EXT $MAIN_DIR$DIR$DATA_DIR
$CHOWN $USER $BACKUP_DIR$DIR$EXT
done
$CHOWN -R $USER $BACKUP_DIR
exit 0
Добавляем в CRON от root-пользователя
/bin/sh /backup/backup.sh
/bin/sh /backup/sql.sh
Ставим нужное нам расписание
После работы этих двух скриптов мы имеем бэкапы файлов каждого пользователя по отдельности и бекап MySql.
Теперь мы можем делать с ними все что угодно: либо на стороннем сервере в другом ДЦ забирать их с помощью wget, либо (как это реализовано у меня) с помощью несложного windows-приложения, загруженного в планировщик, ежедневно скачивать бэкапы на локальную машину.
В целях безопасности в папку site.ru/backup/ советую положить следующий .htaccess
Order Deny,Allow
Deny from all
Allow from Ваш.IP.Адрес, IP.Адрес.ВПС.Если.Используете.wget
Удачи Вам, и не теряйте свои данные.