스크립트

#!/bin/sh

BackupDir="/var/service/DB/"
DATE=$(date +%Y%m%d)
DELDATE=$(date --date "28 day ago" +%Y%m%d)
SqlAcc="-uUser1 -pPassword1"
SqlOption="${SqlAcc} --default-character-set=utf8 --routines --single-transaction --quick"

rm -rf ${BackupDir}${DELDATE}
mkdir ${BackupDir}${DATE}
chmod 700 ${BackupDir}${DATE}

DBlist=$(mysql ${SqlAcc} -e "show databases" | grep -v Database | grep -v information_schema)
# DBlist=$(cat ./DB_List.txt)

for DB in $DBlist; do
  FileName="${BackupDir}${DATE}/${DB}.sql"
  mysqldump ${SqlOption} --no-create-db ${DB} > $FileName
  gzip --best --rsyncable $FileName
  done

chmod 400 ${BackupDir}${DATE}/*

# when you recovery, SQL file overwrite to DB.

 

스케줄 등록(crontab)

# crontab -e

 0 6 * * * /var/service/DB/DBbak.sh

 

스크립트 설명

더보기
#!/bin/sh

* BackupDir="[DB 백업 경로]"    // 백업 경로.
DATE=$(date +%Y%m%d)
* DELDATE=$(date --date "[숫자] day ago" +%Y%m%d)    // 백업 기간.
* SqlAcc="-u[유저명] -p[비밀번호]"

// 필요 옵션 추가해서 사용.
* SqlOption="${SqlAcc} [옵션]"


rm -rf ${BackupDir}${DELDATE}    // 백업 기간 지난 백업본 삭제.
mkdir ${BackupDir}${DATE}
chmod 700 ${BackupDir}${DATE}


// DB 목록 직접 조회 후 백업 진행.
* DBlist=$(mysql ${SqlAcc} -e "show databases" | grep -v [백업 제외 DB명])

// DB 목록을 사용할 경우.
# DBlist=$(cat ./DB_List.txt)


// DB 백업 진행
for DB in $DBlist; do
  FileName="${BackupDir}${DATE}/${DB}.sql"
  mysqldump ${SqlOption} --no-create-db ${DB} > $FileName
  gzip --best --rsyncable $FileName     // 압축 원하지 않을 경우 제외해도 무방.
  done


chmod 400 ${BackupDir}${DATE}/*    // 삭제 방지


# 복구할 때는 sql 파일을 DB로 덮어쓰기 진행.

DB 복구하는 방법