/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
출처 : http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=70556&page=2
'Database > MYSQL' 카테고리의 다른 글
MariaDB SHA2 512 방식으로 암호화 예제 (0) | 2019.10.25 |
---|---|
Mysql & MariaDB 튜닝 쉘 (0) | 2019.08.14 |
무료 접속 툴 (Free Tool) (0) | 2009.03.06 |
C를 이용한 성적관리 예제 (0) | 2009.03.06 |
mysql(latin1 -> euckr 변경) (0) | 2009.03.06 |