스크립트
#!/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 복구하는 방법