웹 사이트를 운영하다보면 데이터베이스에 사고(?)가 발생할 수도 있습니다. 쌓여왔던 데이터를 모두 잃어버릴 수도 있습니다. 그럴 때를 대비해서 하루하루? 데이터베이스를 백업을 할 필요가 있습니다.
현재 사용하고 있는 리눅스, 우분투 서버에서 MySQL 데이터베이스를 자동으로 백업하는 스크립트를 작성하고 매일 매일 실행되도록 설정해 보겠습니다.
저장할 디렉토리 준비
백업 파일을 저장할 디렉토리를 준비하고 쓰기 권한을 잘 설정해 둡니다.
mkdir db_bakup
chmod 755 db_backup
쉘 스크립트 작성
backup.sh 이름으로 파일을 생성하고 아래 내용을 참고해서 작성합니다.
FILE_NAME=backup_`date +”%Y%m%d%H%M%S”`
BACKUP_DIR=/root/db_backup/
mysqldump -u[USER] -p[PASSWORD] –databases [DB_NAME] > $BACKUP_DIR$FILE_NAME.sql
find $BACKUP_DIR -ctime +14 -exec rm -f {} \;
FILE_NAME 은 %Y%m%d%H%M%S 형식으로 백업시간을 파일명으로 하기 위함입니다.
BACKUP_DIR 는 준비해놓은 디렉토리로 설정하면 됩니다.
mysqldump 프로그램을 이용해서 실제 데이터베이스 백업을 실행합니다.
[USER] 자리는 MySQL 계정이고, [PASSWORD]는 그 계정의 비밀번호이고, [DB_NAME]은 백업할 데이터베이스 이름입니다.
find $BACKUP_DIR -ctime +14 -exec rm -f {} \;
마지막 줄은 2주가 지난 백업파일은 삭제하기 위한 리눅스 명령입니다. ctime 으로 오래된 백업파일을 골라내고 exec rm 명령으로 삭제합니다.
작성한 backup.sh 는 현재 단순 텍스트 파일이니, 실행이 가능하도록 파일 모드를 변경합니다.
chmod 100 backup.sh
리눅스 콘솔에서 ./backup.sh 를 실행해 백업을 위한 디렉토리에 sql 파일이 생성되는지 먼저 확인합니다. 잘 실행되면 매일매일 자동으로 backup.sh 를 실행하도록 cron 에 등록을 합니다.
아래 명령으로 crontable 편집화면으로 들어갑니다.
$ crontab -e
# 매일 0시 0분 backup.sh 파일 실행
0 0 * * * /root/database_backup/backup.sh
위처럼 편집하고 빠져나오면 설정이 끝납니다.
이제 매일매일 자동으로 데이터베이스 백업이 실행됩니다.
Leave a Reply