데이터베이스 backup을 위한 linux shell script

2015-04-27 11:05

SLiPP 서버를 D2의 지원을 받아 서버를 이전했다. 이전하면서 DB Backup을 자동화하려고 찾아봤더니 유용하게 쓸 수 있는 자료가 있어 공유한다.

Linux shell script for database backup

위 링크에 포함되어 있는 shell script 예제는 다음과 같다. 앞으로 shell script 만드는데 많은 도움이 되겠다.

#!/bin/sh
now="$(date +'%d_%m_%Y_%H_%M_%S')"
filename="db_backup_$now".gz
backupfolder="/var/www/vhosts/example.com/httpdocs/backups"
fullpathbackupfile="$backupfolder/$filename"
logfile="$backupfolder/"backup_log_"$(date +'%Y_%m')".txt

echo "mysqldump started at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
mysqldump --user=mydbuser --password=mypass --default-character-set=utf8 mydatabase | gzip > "$fullpathbackupfile"
echo "mysqldump finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"

chown myuser "$fullpathbackupfile"
chown myuser "$logfile"
echo "file permission changed" >> "$logfile"

find "$backupfolder" -name db_backup_* -mtime +8 -exec rm {} \;
echo "old files deleted" >> "$logfile"

echo "operation finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
echo "*****************" >> "$logfile"
exit 0

1개의 의견 from SLiPP

2015-04-28 16:58

안녕하세요. mysqldump 같은 경우에 online-backup(핫백업) 이 아닌 coldbackup 을 해야되서 저같은경우는 핫백업이 가능한 xtrabackup 을 이용합니다.

#!/bin/sh

basedir=/home/mysql
datadir=/home/mysql/data
backupdir=/home/mysql/backup

user=DB계정
password=비밀번호

innobackupex --user=$user --password=$password $backupdir
#target=`(date '+%Y-%m-%d_%H-%M-%S')`
#mkdir $backupdir/$target

#cnt=`ls -l /home/mysql/backup | wc -l`
cnt=`ls -rlt $backupdir | grep -v ^total | awk '{print $9}' | wc -l`

# 7일치 백업 파일 유지 최근 7일을 제외한 백업 삭제
while [ ${cnt} -gt 7 ]
do
    dir=`ls -rlt /home/mysql/backup/ | grep -v ^total | awk '{print $9}'| head -n 1`
#   echo $cnt $dir
    rm -Rf $backupdir/$dir

    cnt=`ls -rlt $backupdir | grep -v ^total | awk '{print $9}' | wc -l`
done

그다음에 위에 스크립트 파일을 crontab 에 등록해줍니다. 보통 트래픽이 가장적은 4시쯤.

의견 추가하기