Делаем бекапы всего, что для нас важно!
Статья перенесена из старого блога.
Однажды я хостился у одного горе-хостинга (как оказалось) под названием CloudMouse. Которые, в один прекрасный, солнечный день. Вдруг стали недоступны по всем сервисам.
Кроме своей панели управления. Даже главная хостинга не открывалась. После саппорт ответил, что у них там какой-то сбой и они разбираются с этим. Это затянулось на двое суток.
А после ответ был таков:
И немного спустя, вот это:
Естественно, все свои проекты с их VPS я потерял. Т.к. бэкапы были тоже у них! 7 лет работы, коту под хвост...
Запомните: "Есть 2 типа админов, кто еще не делает бэкапов и кто уже делает!" Это печальная правда.
И так, теперь к делу. После этой ситуации я всерьез задумался о бэкапировании ВСЕХ данных.
Сперва, я озадачился выбором самого хостинга под бэкапы. Не буду описывать весь процесс выбора по критериям из которых, я исходил.
Но мой выбор остановился здесь: ihor.ru (не в коем случае, не реклама)
Но, их проект айхор существует с 2010 года. Об этом написано на сайте компании владельца. Дружелюбный, компетентный и быстрый саппорт.
Цены тоже не кусаются.
Так вот, получил я место под бэкапы и реквизиты доступа к нему. И тут началась "жара" в поиске и в итоге по написанию (допилу) скриптов автобэкапирования.
Подготовка
У меня на VPS под сайты, стоит debian.
В репозиториях есть такой пакет curlftpfs. Который позволяет смонтировать ftp к системе.
Вводим:
apt-get install curlftpfs
Установили. Идем дальше:
mkdir /mnt/backupcurlftpfs ftp://backup.pldev.ru/ /mnt/backup -o user=логин:пароль
Теперь в папке /mnt/backup у нас содержимое ftp сервера. Туда мы и будем складывать наши копии. Надо добавить в автозагрузку точку монтирования нашего фтп сервера. Добавляем в файл /etc/rc.local строчку:
curlftpfs ftp://backup.pldev.ru/ /mnt/backup -o user=логин:пароль
Ну и наконец, переходим к скриптам.
Debian
Скрипт для создания резервной копии всех баз MySQL:
#!/bin/sh# System + MySQL backup script### System Setup ###BACKUP=/root/backup/ ### Mysql ### [параметры доступа к нашим базам MySQL]MUSER="root"MPASS="пароль"MHOST="localhost" ### FTP ###FTPD="/db/"FTPU="логин" # [имя пользавателя (логин) удаленного ftp-cервера]FTPP="пароль" # [пароль доступа к удаленному ftp-серверу]FTPS="ip-адрес" # [собственно, адрес ftp-сервера или его IP] ### Binaries ###TAR="$(which tar)"GZIP="$(which gzip)"FTP="$(which ftp)"MYSQL="$(which mysql)"MYSQLDUMP="$(which mysqldump)" ## Today + hour in 24h format ###NOW=$(date +%Y%m%d) ### Create temp dir ### mkdir $BACKUP/$NOW ### name Mysql ###DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"for db in $DBSdo ### ###mkdir $BACKUP/$NOW/$dbFILE=$BACKUP/$NOW/$db/$db.sql.gzecho $i; $MYSQLDUMP --add-drop-table --allow-keywords -q -c -u $MUSER -h $MHOST -p$MPASS $db $i | $GZIP -9 > $FILEdone ARCHIVE=$BACKUP/mysql-$NOW.tar.gzARCHIVED=$BACKUP/$NOW $TAR -zcvf $ARCHIVE $ARCHIVED ### ftp ###cd $BACKUPDUMPFILE=mysql-$NOW.tar.gz$FTP -n $FTPS <<END_SCRIPTquote USER $FTPUquote PASS $FTPPcd $FTPDmput $DUMPFILEquitEND_SCRIPT ### clear ### rm -rf $ARCHIVED exit
И сохраняем его например под названием mysql_backup.sh, выполняем команду chmod +x что бы разрешил выполнение файла.
Делаем backup веб-сайтов:
#!/bin/bash # current dateDATE=`date +%Y-%M-%d` # y/m/d/h/m separatelyYEAR=`date +%Y`MONTH=`date +%m`DAY=`date +%d`HOURS=`date +%H`MINUTES=`date +%M` /bin/tar -zcvpf /mnt/backup/web/web_$DAY-$MONTH-$YEAR.tar.gz /www-data/* --exclude=*.tar.gz exit
Сохраняем его под названием backup_web.sh и выполняем chmod +x backup_web.sh
Делаем бэкап самой VPS (целой системы):
#!/bin/bash echo Start: >> ./node_logecho `date` >> ./node_log # Что бы знать, когда стартует и сколько времени проходит.tar -zcvpf /backup/backup-`date '+%d-%B-%Y'`.tar.gz / --exclude=/proc --exclude=/sys --exclude=/dev/pts --exclude=/backup --exclude=/mnt --exclude=/dev --exclude=/lost+found --exclude=/etc/fstab --exclude=/boot/grub/grub.conf --exclude=/var/log --exclude=*.tar.gzmv /backup/backup-`date '+%d-%B-%Y'`.tar.gz /mnt/backup/node/backup-`date '+%d-%B-%Y'`.tar.gzecho Finish: >> ./node_logecho `date` >> ./node_logecho ----- >> ./node_log exit
Сохраняем под названием backup_system.sh и выполняем так же chmod +x backup_system.sh
Советую, запустить каждый скрипт и проверить его работу! Естественно подправив его под себя. Пути, реквизиты доступа и т.д.
И после внести в crontab:
# backup mysql10 0 */1 * * /root/backup_mysql > /dev/null# backup web0 3 */1 * * /root/backup_web.sh > /dev/null 2>/dev/null# backup system0 6 * * 1 /root/backup_system.sh > /dev/null 2>/dev/null
C никсами вроде бы все. Все это сейчас успешно работает у меня.
Подготовка для Windows
Т.к. я являюсь администратором игрового сервера, а он запущен под окнами.
Пришлось заботиться и о резервном копировании данных под форточками
В "идеале" было бы подключить ftp как диск. И как оказалось, это вполне реально.
Представляю вашему вниманию программу NetDrive. НО! Последняя её бесплатная версия 1.3.4, дальше уже она идет платная. Триальная версия 30 дней.
А после будет куча "гемора" с ней, если её не купить. По-этому, я вам выкладываю именно последнюю бесплатную версию.
C её настройкой проблем возникнуть не должно. Там все просто, заполняете данные для доступа к FTP и выбираете диск, у меня это F:.
И проверяем, видны ли файлы с ftp сервера. Если все ок, идем дальше.
Бэкапим данные под виндой
Создаем .bat файл с содержимым:
@echo off "c:\program files\winrar\rar.exe" a -r -t -ed -m5 -x@c:\list.txt c:\backup-%date%.rar D:\life\ copy c:\backup-%date%.rar f:\backup-%date%.rar del c:\backup-%date%.rar
Соответственно, у меня сохраняется папка D:\life. У вас должен быть установлен WinRar.
А так же создаем файл исключений (c:\list.txt):
log**.bin*.log*.rar*.zipexception*
Это файлы которые не попадут в архив.
Бэкапим MsSQL базы
Для этого есть утилита SQLBakFree. Бесплатна и функциональна. В ней есть поддержка, как "заливки" на фтп. Так и "складывания" в папочку.
По-этому, на этом я не буду задерживаться.
Бекапим логи
@echo offecho Save Logs GameServerrename LOG savedrd /s /q "D:\life\[5]GameServer\logfile" "c:\program files\winrar\rar.exe" a -r -t -ed -m5 backup-%day%.%month%.%year%_%hour%.rar D:\life\[5]GameServer\saved\*move backup-%day%.%month%.%year%_%hour%.rar f:\logs\ RD /S /Q saved
Думаю, комментарии излишни.
И не забудьте, это все добавить в Планировщик заданий, что бы все происходило автоматически.
Итог
Делайте бэкапы всегда, тем самым вы застрахуете себя от подобных ситуаций. Как к сожалению, произошла у меня.
И вы не потеряете то, что для вас действительно важно.