IT
March 3, 2021

Делаем бекапы всего, что для нас важно!

Статья перенесена из старого блога.

Однажды я хостился у одного горе-хостинга (как оказалось) под названием 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

Думаю, комментарии излишни.

И не забудьте, это все добавить в Планировщик заданий, что бы все происходило автоматически.

Итог

Делайте бэкапы всегда, тем самым вы застрахуете себя от подобных ситуаций. Как к сожалению, произошла у меня.

И вы не потеряете то, что для вас действительно важно.