Резервное копирование своими силами

Тема в разделе "Администрирование серверов", создана пользователем odies, 20 мар 2013.

  1. odies

    odies

    Регистрация:
    20 мар 2013
    Сообщения:
    9
    Симпатии:
    7
    Так случилось, что при первой покупке сервера, я очень экономил отказавшись от панели управлении и бекапа. И тут спустя неделю упорной работы, троян ворует пароли фтп и сносит всесь мой труд.
    Как говорится, на ошибках учатся. Я все так же экономлю на отказе от "плюшек" к серверу, но на резервное копирование смотрю по другому. Так как же я решаю эту проблему?

    И так, что мы имеем?

    Виртуальный или физический сервер с установленной Linux-ОС, веб-сервером и базами данных MySQL.
    Файлы веб-сервера располагаются в директориях
    /home/site1
    /home/site2
    /home/site3

    Что требуется

    Создание скрипта для резервного копирования файлов и баз данных с сохранением на удаленном FTP-сервере и запуск его каждый день.

    Как я решаю проблему

    Для простоты примера работать мы будем из-под root`а, директория для хранения бэкапов файлов — /root/backup/server, а для дампов MySQL — /root/backup/mysql

    Само решение

    Здесь приводится пример скрипта для бэкапа файлов, для наглядности пояснения даны в квадратных скобках на русском языке.

    Код:
    #!/bin/sh
    ### System Setup ###
    BACKUP=/root/backup/server
    Код:
    ### FTP ###
    FTPD="/"
    FTPU="username" [имя пользавателя (логин) удаленного ftp-cервера]
    FTPP="megapassword" [пароль доступа к удаленному ftp-серверу]
    FTPS="my_remote_backup.ru" [собственно, адрес ftp-сервера или его IP]
    Код:
    ### Binaries ###
    TAR="$(which tar)"
    GZIP="$(which gzip)"
    FTP="$(which ftp)"
    Код:
    ## Today + hour in 24h format ###
    NOW=$(date +%Y%m%d) [задаем текущую дату и время, чтобы итоговый файл выглядел в виде server-YYYYMMDD.tar.gz]

    ### Create tmp dir ###

    Код:
    mkdir $BACKUP/$NOW
    $TAR -cf $BACKUP/$NOW/etc.tar /etc [c целью сохранения настроек для простоты копируем весь /etc ]
    $TAR -cf $BACKUP/$NOW/site1.tar /home/site1/
    $TAR -cf $BACKUP/$NOW/site2.tar /home/site2/
    $TAR -cf $BACKUP/$NOW/site2.tar /home/site3/
     
    ARCHIVE=$BACKUP/server-$NOW.tar.gz
    ARCHIVED=$BACKUP/$NOW
     
    $TAR -zcvf $ARCHIVE $ARCHIVED
    
    Код:
    ### ftp ###
    cd $BACKUP
    DUMPFILE=server-$NOW.tar.gz
    $FTP -n $FTPS <<END_SCRIPT
    quote USER $FTPU
    quote PASS $FTPP
    cd $FTPD
    mput $DUMPFILE
    quit
    END_SCRIPT
    
    ### clear ###

    rm -rf $ARCHIVED

    Результатом работы данного скрипта будет созданный файл в директории /root/backup/server вида server-ГГГГММДД.tar.gz содержащий в себе tar-архивы директорий /etc, /home/site1, /home/site2 и /home/site3
    Этот же файл будет загружен на FTP-сервер, который мы указали в начале скрипта.

    Решение для базы

    Этим скриптом мы выгружаем базы данных MySQL (делаем т.н. «дампы). Каждая база выгружается в отдельный файл.

    Код:
    #!/bin/sh
    # System + MySQL backup script
    ### System Setup ###
    BACKUP=/root/backup/mysql
     
    ### Mysql ### [параметры доступа к нашим базам MySQL]
    MUSER="root"
    MPASS="megapassword"
    MHOST="localhost"
     
    ### FTP ###
    FTPD="/"
    FTPU="username" [имя пользавателя (логин) удаленного ftp-cервера]
    FTPP="megapassword" [пароль доступа к удаленному ftp-серверу]
    FTPS="my_remote_backup.ru" [собственно, адрес 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 $DBS
    do
     
    ### ###
    mkdir $BACKUP/$NOW/$db
    FILE=$BACKUP/$NOW/$db/$db.sql.gz
    echo $i; $MYSQLDUMP --add-drop-table --allow-keywords -q -c -u $MUSER -h $MHOST -p$MPASS $db $i | $GZIP -9 > $FILE
    done
     
    ARCHIVE=$BACKUP/mysql-$NOW.tar.gz
    ARCHIVED=$BACKUP/$NOW
     
    $TAR -zcvf $ARCHIVE $ARCHIVED
     
    ### ftp ###
    cd $BACKUP
    DUMPFILE=mysql-$NOW.tar.gz
    $FTP -n $FTPS <<END_SCRIPT
    quote USER $FTPU
    quote PASS $FTPP
    cd $FTPD
    mput $DUMPFILE
    quit
    END_SCRIPT
    ### clear ###
     
    rm -rf $ARCHIVED
    Результат работы скрипта — файл в директории /root/backup/server вида mysql-ГГГГММДД.tar.gz содержащий в себе tar-архивы c дампами всех баз данных и его выгрузка на FTP-сервер.

    аво старт

    Сохраняем данные скрипты в директорию /etc/cron.daily, предварительно проверив в файле /etc/crontab, что именно из этой директории запускаются скрипты каждый день.
     
    AlexV нравится это.
  2. sitecreator

    sitecreator

    Регистрация:
    1 фев 2013
    Сообщения:
    291
    Симпатии:
    65
    Даже и не знаю как можно (и зачем?) найти сервер или VPN без установленного бесплатного ISPmanager Lite.
    Надо брать в нормальных местах, там всегда есть панель управления. денег дополнительно не берут за это.