ユーザ用ツール

サイト用ツール


サイドバー

このページの翻訳:



最近の更新



Tag Cloud

bash:script:24_backup_shell

24 バックアップシェル(backup.sh)

Cronでバックアップ用シェルのメモ

#!/bin/bash

BACKUP_DIR=/home/backups
BACKUP_LIST=${BACKUP_DIR}/conf
TAR_OP="--sparse --one-file-system -zcp --numeric-owner --xattrs ."
usage_exit() {
        echo "Usage: $0 [-H host] [-p period type] [-l list_file] " 1>&2
        exit 1
}

while getopts p:H:l:h: OPT
do
    case $OPT in
        H)  BAKHOST=$OPTARG
        ;;
        p)  PERIOD=$OPTARG
            ;;
        l)  LIST=$OPTARG
            ;;
        u)  USER=$OPTARG
            ;;
        h)  usage_exit
            ;;
        \?) usage_exit
            ;;
    esac
done

shift $(($OPTIND - 1))

if [ -z $LIST ];then
    LIST=${BAKHOST#*@}
fi

#exit;
function dir_check(){
    dir=$1
    if [ ! -d $dir ];then
        mkdir -p $dir
    fi
}
function period_check(){
    if [ $1 == 'day' ];then
        PDIR=$(date +%a)
    elif [ $1 == 'month' ];then
        PDIR=$(date +%m)
    else
        echo "Error period type."
        exit;
    fi
}
function list_check(){
    if [ ! -d $BACKUP_LIST ];then
        dir_check $BACKUP_LIST
    fi

    BKLIST=$BACKUP_LIST/$LIST
    if [ ! -f $BKLIST ];then
        echo "Error list not found: $BKLIST"
        exit;
    fi
}
function rsync_dir(){
    list_check
    echo "backup_list: $BKLIST"
    echo "============="
    period_check $PERIOD
    BK_DIR=$BACKUP_DIR/$LIST/$PERIOD/$PDIR

    #for LINE in `cat $BKLIST`
    while read LINE
    do
        if [ "${LINE:0:1}" == "#" -o -z "${LINE}" ];then
            continue
        fi


        echo "backup: $LINE"
        DIR=${LINE%:*}
        FILE_NAME=${LINE#*:}
        dir_check $BK_DIR

        if [ "${DIR}" == 'mysql' ];then

            dir_check $BK_DIR/DB
            if [ "${FILE_NAME}" == "all" ];then
                ssh $BAKHOST "mysqldump --all-databases " | gzip | cat > $BK_DIR/DB/all.sql.gz
            else
                ssh $BAKHOST "mysqldump ${FILE_NAME} " | gzip | cat > $BK_DIR/DB/$FILE_NAME.sql.gz
            fi
        elif [ "${DIR: -1}" == '/' ];then
            ##ssh $BAKHOST "tar -C $DIR $TAR_OP"|  cat > $BK_DIR/$FILE_NAME.tar.gz
            echo "rsync -aSH --inplace $BAKHOST:$DIR $BK_DIR/$FILE_NAME/"
            rsync -aSH --inplace $BAKHOST:$DIR $BK_DIR/$FILE_NAME/
        else
            echo "rsync -aSH --inplace $BAKHOST:$DIR $BK_DIR/$FILE_NAME"
            rsync -aSH --inplace $BAKHOST:$DIR $BK_DIR/$FILE_NAME
        fi
    done < $BKLIST
}


rsync_dir
exit;

conf file

# cat /home/backups/conf/host_name

## directory rsync 
/var/www/vhost/:vhost

## file rsync
/var/spool/cron/root:cron_root

## mysqldump all
mysql:all

## mysqldump each db
#mysql:hogedb

Cron

# crontab -l
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

10 0 * * * backup.sh -H root@hogehost -l hogehost -p day > /var/log/backup_day.log 2>&1
10 1 1 * * backup.sh -H root@hogehost -l hogehost -p month > /var/log/backup_month.log 2>&1

## hosts に書いておくパターン
10 0 * * * backup.sh -H hogehost -p day > /var/log/backup_day.log 2>&1
10 1 1 * * backup.sh -H hogehost -p month > /var/log/backup_month.log 2>&1

bash/script/24_backup_shell.txt · 最終更新: 2022/08/11 11:16 by matsui