Mysql 데이터베이스 백업 스크립트 DBDUMP.CRON

서버관련/Install2008. 6. 5. 00:54HanQ eNFO
#!/bin/sh
find /backup1/mysqldump -ctime +7 \-exec rm -f {} \;
#
######################################################
##
## [백업하는 자료]
##
## 0. 날짜별로 백업(예: filename-20010310-04.xxx)
## 1. 시스템 날짜 수정(rdate)
## 2. mysql 모든 DB를 .sql 이나 .sql.gz 형태로 백업
## 3. 기타(아직 없음)
##
## * 나머지 설정 파일은 일주일에 한번이나 두번 정도로
##   백업하는 것이 적당.
##
######################################################
##
## [관리자가 꼭 설정해야할 내용 - 10가지]
##
## [0] MySQL DB를 백업할까요?
##     1 = yes(DB를 백업합니다.)
##     0 = no (DB를 백업하지 않습니다.) *** 이하 설정할 필요없음 ***
mysql_dbdump="1"
## [1] MySQL이 어떠한 이유 등으로 가동중이지 않을 경우에 메일을
##     받을 볼 user나 메일 주소 설정.
##
##     만약 메일을 받아 보기를 원치 않는다면 다음 설정을 주석(#)
##     으로 처리하거나 공백으로 설정
##
reportmailto="webmaster"
## [2] 기본 백업 디렉토리 설정(수동으로 디렉토리 만들 필요없음)
##
backupdir="/backup1"

## [3] MySQL DB 서버(클라이언트가 아님)            
## localhost인 경우 localhost로 설정하세요.
##
mysql_host="localhost"
## [4] MySQL DB root 암호(시스템 root 암호 아님)
##     **이 파일의 퍼미션에 주의 **             
##
mysql_rootpasswd="mysqlpassword"
## [5] MySQL DB dump 디렉토리(뒤 부분, 수동으로 디렉토리 만들 필요없음)
##
mysql_backupdir="${backupdir}/mysqldump"
## [6] MySQL DB dump 프로그램
##     RPM으로 설치했다면 'which mysqldump'의 결과 명시
##
mysql_dump="/usr/local/mysql/bin/mysqldump"
## [7] MySQL DB show 프로그램
##     RPM으로 설치했다면 'which mysqlshow'의 결과 명시
##    
mysql_show="/usr/local/mysql/bin/mysqlshow"
## [8] dump한 DB를 압축하시겠습니까?
##     1 = yes(예: dbname-20010310-04.sql.gz)
##     0 = no (예: dbname-20010310-04.sql)
##    
db_compress="1"
## [9] 전체 DB 중 포함시키지 않을 DB 설정
##     각 DB의 구분은 "또는 연산자(|)"로 다음과 같이 구분
##     기본 값으로는 test와 test2로 설정되어 있음.            
##
not_dump_db="test|test2"
##
## 설정 내용 끝(이하 수정할 필요 없음)    
##
######################################################
######################################################
##
## 시스템 시간 설정 조정                        
##
/usr/bin/rdate -s time.bora.net >/dev/null 2>&1
## MySQL DB를 백업하지 않는다면 종료함.
##
if [ "$mysql_dbdump" != "1" ] ; then   
        exit 0
fi
## 파일을 구분하기 위해서 날짜-시간으로 설정
##
sysdtime=`date +%Y%m%d-%H`
## MySQL DB dump
##    
## MySQL 접속 파라미터
##
mysql_connect="-h $mysql_host -u root -p$mysql_rootpasswd"
## MySQL 모든 DB 축출
## 앞에서 설정한 $not_dump_db는 제외됨
##            
mysql_DBs=`$mysql_show $mysql_connect 2>/dev/null | egrep -v "(${not_dump_db}|Databases|\+)" | awk '{print $2}'`
## 실제로 DB를 dump 하는 함수
##    
mysql_dump_work() {
        mysql_each_DB="$1"
        mysql_dump_file="${mysql_backupdir}/${mysql_each_DB}-${sysdtime}.sql"
        $mysql_dump $mysql_connect $mysql_each_DB > $mysql_dump_file
        if [ "$db_compress" = "1" ] ; then
                gzip -f9 $mysql_dump_file
        fi
}
if [ "$mysql_DBs" != "" ] ; then                
        if [ ! -d "$mysql_backupdir" ] ; then 
                mkdir -p "$mysql_backupdir"
                chmod 700 "$mysql_backupdir"
        fi
        ## All DB dump to one file(.sql) !!!!
        ## Verbal advice --> LSN tip board : 'lubzzon'
        ## --all-databases > all_db.sql
        ##
        for mysql_DB in $mysql_DBs ; do
                mysql_dump_work $mysql_DB
        done
        #chmod 600 $mysql_backupdir
        #chown root mysql_backupdir
else
        ## MySQL이 가동중이지 않을 경우
        ## 주) 아래에서 ${IFS}=$IFS HTML에서 <BR>과 같음.
        ##
        if [ "$reportmailto" != "" ] ; then
                mailsubject="dailydump.cron report [${HOSTNAME}]"
                mailmessages="MySQL이 가동하지 않거나 DB가 없습니다.${IFS}MySQL 서버(${mysql_host}) 확인하세요!!!"
                echo "$mailmessages" | mail -s "$mailsubject" "$reportmailto" >/dev/null 2>&1
        fi        
fi
exit 0

-출처는 기억이 나질 않습니다 ㅜㅜ;; 아마 1000dedi.net 이었던것 같은데 지금 서버에 이렇게 사용하고있어서..-
블로그 주인 사진AuthoreNFO
자주 잊어먹는것들을 기록해 놓을려고합니다.^^