/etc/cron.daily 에 파일을 만들어 두거나


crond 에 등록해서 사용하시면 됩니다.


[기능요약]


1. root 계정으로 전체 디비를 디비별로 백업 가능함

2. 옵션으로 테이블 별 백업 가능함.

3. 보존 설정 기간 이후 자동 삭제

#!/bin/sh 

############################################################################ 
# 
# 
# 데이터 베이스별 혹은 테이블 별로 백업 받을 수 있도록 변경했으며 
# 30 LINE 에 명기된 배열에 속하는 디비들만 테이블 별로 백업 받는다. 
# 
# 데이터베이스 단위로 받은 파일은 DB. 으로 시작하고 
# 테이블 단위는 TB. 으로 시작하는 파일명을 갖는다. 
# 
# 백업 파일은 dump.gz 로 형성 되며 설정된 보존 기간이 지나면 자동 삭제 된다. 
# 
############################################################################# 

##### SET VARIABLES ############ 전체를 백업 받으려면 여기에 root 계정을 입력한다. 
DBHOST="yourhost" 
DBUSER="yourid" 
DBPWD="yourpassword" 

#백업 경로 
BACKUPDIR="/home/your_backup_dir/" 
#로그 작성 경로 
LOGDIR="/home/your_backup_log_dir/" 
#로그 파일 앞에 붙을 특정 텍스트 
LOGNAME="log_" 

###### SET DB NAMES which BACKUP by TABLES ###### 여기 표시된 DB 들은 테이블 별로 백업된다. 
DB_TBARR=(dbname1 dbname2 dbname3) 

#백업 옵션을 원하는 대로 설정 
#routine 옵션은 5버전 이상에서만 사용(function 등을 백업함) 
OPTIONS="--skip-comments --default-character-set=euckr --routines" 

##### SET CHARGE LIMIT ########## 백업 파일 저장 기간(일단위) 
CHARGE_LMT=3 

##### DELETE OLD_BACKUP FILES ####### 
find ${BACKUPDIR} -name "*.gz" -mtime +${CHARGE_LMT} -exec rm -rf {} \; 

##### START LOG CREATE ########## 
YMD_S=`date +%Y%m%d%H%M%S` 
touch ${LOGDIR}${LOGNAME}${YMD_S}.start 

##### DB LIST GET ############### 
#IF YOU WANT TO EXCEPT SOME DATABASE ADD THIS 
#grep -v Database | grep -v somename | grep -v somename` 
# 

#grep -v dbname 하면 백업 시 제외 된다. 

RESULT=`mysql -u$DBUSER -p$DBPWD -h$DBHOST -e "show databases" | grep -v Database` 

for DB in $RESULT; do 

    sw=0 
    ##### compare DB to TBARR ##### 
    for i in ${DB_TBARR[@]}; do 
        if [ $i = $DB ]; then 
            let "sw=sw+1" 
        fi 
        done 

    if [ $sw = 0 ]; then 
        # BACKUP by DB 
        FNAME=${BACKUPDIR}DB.${DB}_${YMD_S}.dump 
        #echo $FNAME 
        touch $FNAME 
        echo "set foreign_key_checks=0;" >> $FNAME 
        mysqldump -u$DBUSER -p$DBPWD -h$DBHOST $OPTIONS $DB >> $FNAME 
        echo "set foreign_key_checks=1;" >> $FNAME 
        gzip --rsyncable $FNAME 

    else 
        # BACKUP by TABLES 
                RESULT_TB=`mysql -u$DBUSER -p$DBPWD -h$DBHOST $DB -e"show tables" | grep -v heap | grep -v Tables_in ` 
                for TB in $RESULT_TB; do 

                        FNAME=${BACKUPDIR}TB.${DB}.${TB}_${YMD_S}.dump 
            #echo $FNAME 
            touch $FNAME 
            echo "set foreign_key_checks=0;" >> $FNAME 
            mysqldump -u$DBUSER -p$DBPWD -h$DBHOST $OPTIONS $DB $TB >> $FNAME 
            echo "set foreign_key_checks=1;" >> $FNAME 
            gzip --rsyncable $FNAME 

                done         
    fi 

done 

##### END LOG CREATE ########### 
YMD_E=`date +%Y%m%d%H%M%S` 

touch ${LOGDIR}${LOGNAME}${YMD_E}.end
TAG
Posted by 신공표 트랙백 1 : 댓글 0

댓글을 달아 주세요