리눅스 사용자 DB & Data 자동 백업
유저 DB 및 Data를 자동으로 백업시켜주는 쉘스크립트이다.
7일간 데이터를 보관하고 7일전 데이터는 삭제를 해준다.
mysqldump 에 옵션을 자신에게 맞도록 수정해 주면 된다.
--lock-tables=false 로 된걸 true로 해줘도 되긴 하지만 테이블에 데이터가 많은 경우 락이 걸려서 백업될 동안은 대기상태로 있어야 한다.
#!/bin/bash
DB_ROOT_ID="root"
DB_ROOT_PW="비밀번호"
TODAY=`date +%Y%m%d`
DELETE_DATE=`date +%Y%m%d --date='7 days ago'`
DAY_OF_WEEK=`date +%u`
HOME_DIR="/home"
BACKUP_DIR="/backup"
echo "
Start : "`date` >> /root/backup-users.log
for USER_NAME in $(ls $HOME_DIR)
do
if [ -d "$HOME_DIR/$USER_NAME" ] ; then
USER_BACKUP_DIR="${BACKUP_DIR}/${USER_NAME}"
if [ ! -d "$USER_BACKUP_DIR" ] ; then
mkdir -m 700 $USER_BACKUP_DIR
fi
if [ ! -d "$USER_BACKUP_DIR/$TODAY" ] ; then
mkdir -m 700 $USER_BACKUP_DIR/$TODAY
fi
USER_BACKUP_DIR="${BACKUP_DIR}/${USER_NAME}/${TODAY}"
DB_BACKUP_NAME="${USER_BACKUP_DIR}/${USER_NAME}.sql.gz"
mysqldump -u${DB_ROOT_ID} -p${DB_ROOT_PW} ${USER_NAME} --opt --lock-tables=false | gzip > ${DB_BACKUP_NAME}
chown ${USER_NAME}.${USER_NAME} $DB_BACKUP_NAME
sleep 10
USER_DIR="${HOME_DIR}/${USER_NAME}"
DATA_BACKUP_NAME="${USER_BACKUP_DIR}/${USER_NAME}_data.tgz"
cd ${USER_DIR}
tar czfp $DATA_BACKUP_NAME ./www
chown ${USER_NAME}.${USER_NAME} $DATA_BACKUP_NAME
cd
USER_BACKUP_DEL_DIR="${BACKUP_DIR}/${USER_NAME}/${DELETE_DATE}"
if [ -d "$USER_BACKUP_DEL_DIR" -a "$USER_BACKUP_DEL_DIR" != "" ] ; then
sleep 5
rm -rf ${USER_BACKUP_DEL_DIR}
fi
sleep 5
fi
done
echo "End User Backup : "`date` >> /root/backup-users.log
DB_ROOT_ID="root" MySQL 루트 아이디
DB_ROOT_PW="비밀번호"
HOME_DIR="/home" 유저 디렉토리 위치
BACKUP_DIR="/backup" 백업될 디렉토리 위치
위의 4가지 정보만 수정해주고 적당한 파일명으로 저장한 뒤에 퍼미션을 700으로 바꾸고 크론에 등록해 주자.
서버가 조용한 시간에 백업스크립트가 돌아가게끔 cron에 등록해주면 된다.