Давно известно, что сисадмины делятся на две категории: те, кто еще не делает бэкапы и те кто уже делает. В то время, когда одни ДЦ горят, а вторые внезапно исчезают, лучше всего принадлежать ко второй категории.
Итак, хочу поделиться опытом простого автоматического резервирования данных для чайников.
Необходимо по расписанию создавать резервные копии файлов и базы данных. Эти два процесса должны быть независимы друг от друга, потому что бэкап БД делается чаще, чем бэкап файлов (или наоборот).
Получить архивы файлов и БД на сервере в определенной папке. Архивы должны быть доступны по 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
Удачи Вам, и не теряйте свои данные.
