NETOS 129 Опубликовано: 2013-04-23 18:18:39 Share Опубликовано: 2013-04-23 18:18:39 Привет! Помогите пожалуйста со скриптом архивации. Саму базу данных скрипт дампит и складывает ее на selectel, а файлы которые находятся в папке TARGET_DIR="/var/backups" не архивирует и не складывает. Помогите пожалуйста. Листинг: #!/usr/local/bin/bash # # Script for do automatic backups files and dbs (mysql) # to Selectel Cloud Storage (http://selectel.ru/services/cloud-storage/) # # version: 1.0 # # Authors: # - Konstantin Kapustin <sirkonst@gmail.com> # # ------- Settings ------- # Selectel Storage settings SS_USER="30912" # Storage user SS_PWD="59y8vfjf" # Storage password SS_CONTAINER="billing_backups" # Storage container where we put backup files #Backup settings TARGET_DIR="/var/backups" # What to backup BACKUP_NAME="nodeny" # Name for backup, default the last folder name in target #BACKUP_NAME=`expr match "${TARGET_DIR%%/}" '.*/\(.*\)'` #BACKUP_NAME=`basename $TARGET_DIR` BACKUP_DIR="/usr/myfiles/selectel_temp/$BACKUP_NAME" # Where our backup will be placed EXCLUDE_LIST="\ *~ *.bak *.tar.gz *.old *.log .git/ .svn/ " # Mysql backup settings DB_NAME="bill" # Database name, set __ALL__ for backup all dbs or empty for disable backup DB_USER="root" DB_PWD="polebtrp" DB_HOST="localhost" DB_PORT="3306" EMAIL="nsdaq@gmail.com" # Email for send log, set empty if don't want seng log EMAIL_ONLY_ON_ERROR="yes" # Send a email only if there was something strange (yes:no) DELETE_LOG="yes" # remove log after complite? (yes:no) DELETE_BACKUPS_AFTER_UPLOAD="yes" # remove backups files after successful upload to Storage (yes:no) # How long store backup in the Storage (in days)? If you set 30, uploaded file will be auto removed after 30 days. STORAGE_EXPIRE="" # ------- Utils ------- SUPLOAD=`which supload` MYSQLDUMP=`which mysqldump` BZIP=`which bzip2` TAR=`which tar` SENDMAIL=`which sendmail` # ------- Checking ------- if [ -z "$SS_USER" ] || [ -z "$SS_PWD" ] || [ -z "$SS_CONTAINER" ]; then echo "[!] Please set Selectel Storage settings first!" exit 1 fi if [ ! -d "$TARGET_DIR" ]; then echo "[!] Backup's target doesn't exist $TARGET_DIR!" exit 1 fi if [ ! -d "$BACKUP_DIR" ]; then mkdir "$BACKUP_DIR" if [ $? -ne 0 ]; then echo "[!] Can not create backup dir $BACKUP_DIR!" exit 1 fi fi if [ -n "$EMAIL" ] && [ -z "$SENDMAIL" ]; then echo "[!] sendmail is not installed!" exit 1 fi if [ -n "$STORAGE_EXPIRE" ]; then if [ "$STORAGE_EXPIRE" -eq "$STORAGE_EXPIRE" ] 2>/dev/null; then : else echo "[!] STORAGE_EXPIRE must be a positive integer!" exit 1 fi fi # ------- Preparation ------- TIMESTAMP=$(date +%Y-%m-%d_%Hh%Mm) BACKUP_FILENAME="${BACKUP_NAME}_$TIMESTAMP.tar.bz2" LOG_FILE="$BACKUP_DIR/log_$BACKUP_NAME-$TIMESTAMP.log" declare -a _for_upload if [ x"$DB_NAME" = "x__ALL__" ]; then DB_BACKUP_FILENAME="mysql_${BACKUP_NAME}_ALL_$TIMESTAMP.sql" DB_NAME="" else if [ -z "$DB_NAME" ]; then DB_BACKUP_FILENAME="" else DB_BACKUP_FILENAME="mysql_${BACKUP_NAME}_${DB_NAME}_$TIMESTAMP.sql" fi fi if [ -n "$DB_BACKUP_FILENAME" ] && [ -z "$MYSQLDUMP" ]; then echo "[!] mysqldump is not installed!" exit 1 fi # detect interective mode if [[ -t 1 ]]; then IM="1" else IM="0" fi set -o pipefail _log() { while read line; do if [ x"$IM" == x"1" ]; then echo "$line" | tee -a "$LOG_FILE" else echo "$line" >> "$LOG_FILE" fi done } _error="0" echo "$(date +%H:%M:%S) Begin backup $BACKUP_NAME" | _log # ------- Backup files ------- echo "$(date +%H:%M:%S) Archiving files $TARGET_DIR" | _log tar_exc="" for line in ${EXCLUDE_LIST}; do tar_exc="$tar_exc --exclude '$line'" done cd "$TARGET_DIR/.." #target=`expr match "${TARGET_DIR%%/}" '.*/\(.*\)'` target=`basename $TARGET_DIR` $TAR cjpf "$BACKUP_DIR/$BACKUP_FILENAME" ${tar_exc} "$_target" > /dev/null 2>&1 | _log files_size=$(du -h "$BACKUP_DIR/$BACKUP_FILENAME" | cut -f1) echo "$(date +%H:%M:%S) Files backup put to $BACKUP_DIR/$BACKUP_FILENAME ($files_size)" | _log _for_upload=( "${_for_upload[@]}" "$BACKUP_DIR/$BACKUP_FILENAME") # ------- Backup Mysql ------- if [ -n "$DB_BACKUP_FILENAME" ]; then # Create MySQL database dump echo "$(date +%H:%M:%S) Creating DB dump for ${DB_NAME:-ALL dbs}" | _log $MYSQLDUMP --opt -u "$DB_USER" -p"$DB_PWD" -h "$DB_HOST" -P "$DB_PORT" "${DB_NAME:---all-databases}" > "$BACKUP_DIR/$DB_BACKUP_FILENAME" $BZIP -9 --force "$BACKUP_DIR/$DB_BACKUP_FILENAME" DB_BACKUP_FILENAME="$DB_BACKUP_FILENAME.bz2" db_size=$(du -h "$BACKUP_DIR/$DB_BACKUP_FILENAME" | cut -f1) echo "$(date +%H:%M:%S) Database backup put to $BACKUP_DIR/$DB_BACKUP_FILENAME ($db_size)" | _log _for_upload=( "${_for_upload[@]}" "$BACKUP_DIR/$DB_BACKUP_FILENAME") fi # ------- Upload backups ------- echo "$(date +%H:%M:%S) Uploading backup files to Selectel Storage..." | _log for _file in "${_for_upload[@]}"; do _u_opts="" if [ -n "$STORAGE_EXPIRE" ]; then _u_opts="-d ${STORAGE_EXPIRE}d" fi $SUPLOAD -u "$SS_USER" -k "$SS_PWD" $_u_opts "$SS_CONTAINER" "$_file" | _log if [ $? -ne 0 ]; then _error="1" else if [ x"$DELETE_BACKUPS_AFTER_UPLOAD" = x"yes" ]; then rm -f "$_file" echo "$(date +%H:%M:%S) File $_file was removed" | _log fi fi done # ------- Clearing and notification ------- if [ x"$_error" = x"0" ]; then echo "$(date +%H:%M:%S) Backup complete, have a nice day!" | _log _title="[Backup log] $BACKUP_NAME ($TIMESTAMP)" else echo "$(date +%H:%M:%S) Backup complete with errors, see log $LOG_FILE." | _log _title="[Backup log - !ERRORS!] $BACKUP_NAME ($TIMESTAMP)" fi if [ -n "$SENDMAIL" ] && [ -n "$EMAIL" ]; then if [ x"$_error" = x"0" ] && [ x"$EMAIL_ONLY_ON_ERROR" = x"yes" ]; then : else cat - "$LOG_FILE" << EOF | $SENDMAIL -t To:$EMAIL Subject:$_title EOF fi fi if [ x"$DELETE_LOG" = x"yes" ] && [ x"$_error" = x"0" ]; then rm -f "$LOG_FILE" # Delete log file fi Ссылка на сообщение Поделиться на других сайтах
ttttt 195 Опубліковано: 2013-04-23 18:40:43 Share Опубліковано: 2013-04-23 18:40:43 Вот тут используется переменная $_target, которая нигде не определена, выше определена только $target $TAR cjpf "$BACKUP_DIR/$BACKUP_FILENAME" ${tar_exc} "$_target" > /dev/null 2>&1 | _log Ссылка на сообщение Поделиться на других сайтах
NETOS 129 Опубліковано: 2013-04-23 19:41:12 Автор Share Опубліковано: 2013-04-23 19:41:12 (відредаговано) Супер! Спасибо большое, я и не заметил. +1 Кстати скрипт селектела, и о ошибке ни слова от них. Відредаговано 2013-04-23 19:41:52 NETOS Ссылка на сообщение Поделиться на других сайтах
ttttt 195 Опубліковано: 2013-04-23 20:34:42 Share Опубліковано: 2013-04-23 20:34:42 Кстати, а почему выбран селектел, а не amazon glacier? Для бэкапов было бы дешевле. Ссылка на сообщение Поделиться на других сайтах
NETOS 129 Опубліковано: 2013-04-24 18:38:13 Автор Share Опубліковано: 2013-04-24 18:38:13 (відредаговано) Не знаю... как то ближе, и не в Украине и не далеко за рубежом + на русском все. Відредаговано 2013-04-24 18:39:03 NETOS Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас