[BASH] Скрипт резервного копирования на backblaze.com

Тема в разделе "Другие языки", создана пользователем Цукер, 14 май 2017.

Модераторы: Цукер
  1. Цукер

    Цукер Сам себе призедент

    Moderator
    Регистр.:
    5 мар 2008
    Сообщения:
    416
    Симпатии:
    376
    Скрипт бэкапа.
    В комплекте скрипт под дамп MySQL и PostgreSQL
    Тестировалось на Ubuntu и Debian
    В скриптах нужно исправить только путь к папке которую паковать и данные для подключения к БД
    Все вопосы можно задать в репозитарии \ в топике или в личку

    Линк на репозитарий:
    http://svn.by/saa/BackupToBackblaze
     
  2. funnywheel

    funnywheel WordPress developer

    Регистр.:
    6 авг 2010
    Сообщения:
    245
    Симпатии:
    177
    Линк не робит
     
  3. alex_me

    alex_me Постоялец

    Регистр.:
    25 янв 2017
    Сообщения:
    103
    Симпатии:
    73
  4. alex_me

    alex_me Постоялец

    Регистр.:
    25 янв 2017
    Сообщения:
    103
    Симпатии:
    73
    Готовый скрипт под перкону 2.4 + qpress и mariadb / Centos 7:
    юзер БД bk_percona - с правами как в инструкции перконы по установке

    Бэкап (горячий)
    /percona_backup.sh

    Код:
    #!/bin/bash
    path="/_backups/percona/comp/";
    timestamp=$(date "+%y-%m-%d_%H-%M");
    bk="${path}${timestamp}";
    
    if [ ! -d "$path" ]; then
      # Control will enter here if $DIRECTORY doesn't exist.
      echo "Папка $path не существует"
      echo ""
      exit
    fi
    
    echo "Бэкап mariadb в $bk"
    echo ""
    
    mkdir $bk;
    innobackupex --user=bk_percona --password=mypassword --compress --compress-threads=4 --no-timestamp $bk/bk/ 2>&1|tee $bk/backup.log|egrep "ERROR|completed OK!";
    
    echo "Готово"
    Рестор
    /percona_restore.sh

    Код:
    #!/bin/bash
    timestamp=$1
    path="/_backups/percona/comp/"
    bk=$path$timestamp
    
    if [ ! -d "$bk" ]; then
      # Control will enter here if $DIRECTORY doesn't exist.
      echo "Папка $bk не существует"
      echo ""
      exit
    fi
    
    echo "Восстановить в $bk"
    echo ""
    
    echo "Распаковать";
    innobackupex --decompress $bk/bk/ 2>&1|tee $bk/decompress.log|egrep "ERROR|completed OK!";
    
    echo "Подготовить";
    innobackupex --apply-log $bk/bk/ 2>&1|tee $bk/prepare.log|egrep "ERROR|completed OK!";
    
    systemctl stop mariadb;
    
    echo "Сорханяем старую версию базы";
    rm -rf /tmp/mysql;
    mkdir /tmp/mysql;
    mv /var/lib/mysql/* /tmp/mysql/;
    
    echo "Копируем бекап";
    innobackupex --move-back $bk/bk/ 2>&1|tee $bk/move.log|egrep "ERROR|completed OK!";
    
    echo "Восстанавливаем права и запускаем mariadb"
    chown -R mysql:mysql /var/lib/mysql;
    systemctl start mariadb;
    
    echo "Готово";
    
    Скрит для крона: бэкап по расписанию + ротация бэкапов
    /percona_rotate.sh

    Код:
    #!/bin/bash
    path="/_backups/percona/comp/";
    bk="${path}";
    
    # Срок хранения бэкапов
    ROTATE_PERIOD=14
    
    if [ ! -d "$bk" ]; then
      # Control will enter here if $DIRECTORY doesn't exist.
      echo "Папка $bk не существует"
      echo ""
      exit
    fi
    
    # делаем бэкап
    . /<путь к скрипту>/percona_backup.sh
    
    # Ротация старых бэкапов
    FILE_COUNT=`find $bk -maxdepth 1 -type d | wc -l`;
    
    echo "Кол-во старых файлов: $FILE_COUNT";
    if [ $FILE_COUNT -gt $ROTATE_PERIOD ]; then
      echo "удаление";
      find $bk -maxdepth 1 -type d -mtime +$ROTATE_PERIOD -exec rm -rf {} \;
    fi
    
    echo "";
    echo "Ротация завершена";
    echo "";

    Добавляем в crontab (пример)

    Код:
    0 6 * * * user /<путь к скрипту>/percona_rotate.sh >> /var/log/percona/backup.cron.log
     
    Последнее редактирование: 7 июн 2017