본문 바로가기

Server Story..../mysql

DB 자동저장 스크립트


DB 자동저장 스크립트 





/etc/cron.daily 에 파일을 만들어 두거나
crond 에 등록해서 사용하시면 됩니다.
[기능요약]
1.root 계정으로 전체 디비를 디비별로 백업 가능함
2.옵션으로 테이블 별 백업 가능함.
3.보존 설정 기간 이후 자동 삭제
--------------------------------------------
source----------------------------------------------------------
#!/bin/sh
###########################################################################
#
#
# By 질주본능 2009/06/03
#
# V 2.0
#
# 데이터 베이스별 혹은 테이블 별로 백업 받을 수 있도록 변경했으며
# 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



'Server Story.... > mysql' 카테고리의 다른 글

mysql backup  (0) 2014.04.23
mysql 백업 및 자동삭제 스크립트  (0) 2010.12.17
우분투 8.04 mysql에서 DB파일의 위치를 변경 방법  (1) 2010.12.17
my sql 튜닝 - 체크사항  (0) 2010.09.10