1. На проекте открылась регистрация только для продавцов. Для обычных пользователей будет открыта позже. Подробнее.
    P.S. Не надо скидывать ссылки на форумы, где у вас ноль сообщений. Подобные заявки будут отклонятся.
Скрыть объявление
Привет, Незнакомец! У тебя есть возможность Оставить комментарий в теме

Скриптинг bash script backup для сайта

Тема в разделе "PR0GRAMM1NG", создана пользователем Infoman, 27 янв 2015.

  1. Infoman IPv6

    Infoman
    TS
    WebVoice
    Регистрация:
    12 июл 2011
    Сообщения:
    184
    Симпатии:
    86
    На днях столкнулся с задачей поставить на крон автобекап сайтов(файлов в директориях и базы данных).
    Для начала сам скрипт, а ниже распишу подробней.
    Код:
    #!/bin/sh
    
    doc_root=/home/i/infoman/site
    name=backup_`date +\%Y\%m\%d`
    
    dbconn=$doc_root/public_html/library/config.php
    
    readcfg() {
       grep $1 $dbconn | sed 's/.*"\(.*\)".*/\1/'
    }
    
    host1=`readcfg host`
    username=`readcfg username`
    password=`readcfg password`
    database=`readcfg dbname`
    
    utf=`grep 'BX_UTF' $dbconn | grep true`
    
    if [ -z "$utf" ]; then
       charset=cp1251
    else
       charset=utf8
    fi
    
    backup_dir=$doc_root/backup
    
    if [ ! -e $backup_dir ]; then
       mkdir $backup_dir
    fi
    
    cd $doc_root &&
    mysqldump -h$host1 -u$username -p$password --default-character-set=$charset $database > $backup_dir/$name.sql &&
    tar -cf $backup_dir/$name.tar $backup_dir/$name.sql && 
    rm $backup_dir/$name.sql &&
    tar -rf $backup_dir/$name.tar --exclude '*backup/*' --exclude '*public_html/files/*' . &&
    gzip -f -9 $backup_dir/$name.tar &&
    find $backup_dir -ctime +30 -exec rm {} \; &&
    echo OK && exit
    echo Error

    doc_root определяет рутовую директорию
    name имя файла, в нашем случае будет backup+дата_создания
    Код:
    doc_root=/home/i/infoman/site
    name=backup_`date +\%Y\%m\%d`
    Если мы хотим добавлять в бекап еще и бд, то у нас есть два пути:
    1. Прописываем данные для соединения с базой руками
    2. Указываем в dbconn путь до файла с конфигом и функция readcfg() сама все сделает.
      Приведу пример пары конфигов
      Система управления сайтом Bitrix
      Код:
      dbconn=$doc_root/bitrix/php_interface/dbconn.php
      
      host1=`readcfg DBHost`
      username=`readcfg DBLogin`
      password=`readcfg DBPassword`
      database=`readcfg DBName`
      
      Часть содержимого dbconn.php:
      PHP:
      define("DBPersistent"false);
      $DBType "mysql";
      $DBHost "localhost";
      $DBLogin "root";
      $DBPassword "1Bdy&idPd9lKy";
      $DBName "infomanbd";
      $DBDebug false;
      $DBDebugToFile false;
      Для xenforo
      Код:
      dbconn=$doc_root/public_html/library/config.php
      
      host1=`readcfg host`
      username=`readcfg username`
      password=`readcfg password`
      database=`readcfg dbname`
      
      Часть содержимого config.php:


      PHP:
      $config['db']['host'] = "localhost";
      $config['db']['port'] = "3306";
      $config['db']['username'] = "infomanbd";
      $config['db']['password'] = "13I^bCeUdyDHdfrFF";
      $config['db']['dbname'] = "infomanbd";
      Обратите внимание что данные для подключения заключены в двойные кавычки, иначе функция readcfg() не сработает.
    Далее нам надо указать какие директории не включать в архив бекапа
    Код:
    tar -rf $backup_dir/$name.tar --exclude '*backup/*' --exclude '*public_html/files/*' . &&
    В данном случае папка backup в которой будут складываться бекапы и на самом сайте папка files, в которой хранятся тяжелые файлы.

    Чтоб со временем у нас не закончилось место на хостинге, будем удалять архивы с бекапом старше 30 дней
    Код:
    find $backup_dir -ctime +30 -exec rm {} \; &&

    Сохраняете этот скрипт например как backup.sh, на директорию выше чем ваш сайт.
    Например ваш сайт лежит тут: /home/i/infoman/site/public_html/<файлы сайта>
    Скрипт будет находиться: /home/i/infoman/site/backup.sh
    Бекапы будут сохранятся в: /home/i/infoman/site/backup/

    Самому скрипту надо дать права 700, через SSH это делается так: chmod +x backup.sh

    Теперь вы можете поставить данный скрипт на cron, либо запускать руками ./backup.sh
     
    Chr()m и ddd нравится это.