Linux MySQL 자동 백업 구축: Crontab과 Shell Script 완벽 가이드
운영 서버의 안정성을 담보하는 데이터 백업 전략은 필수입니다. mysqldump와 Crontab을 활용해 DB 및 웹 데이터를 주기적으로 백업하고, 오래된 파일을 자동 정리하는 자동화 스크립트 작성법을 소개합니다.
1. 자동 백업 쉘 스크립트 작성 (DB + 파일)
가장 먼저 수행할 작업은 MySQL 덤프와 웹 디렉터리 압축, 그리고 보관 주기가 지난 파일의 자동 삭제를 처리하는 쉘 스크립트(backup.sh)를 작성하는 것입니다. 전체적인 백업 로직의 흐름은 아래와 같습니다.
아래 스크립트는 날짜 기반으로 파일을 생성하고, 7일이 지난 백업본을 자동으로 정리하여 디스크 공간을 효율적으로 관리합니다.
#!/bin/bash
# 1. 날짜 포맷 설정 (YYYYMMDD)
DATE=$(date +%Y%m%d)
# 2. 백업 경로 설정 (환경에 맞게 수정)
DB_BACKUP_DIR=/backup/db
WEB_BACKUP_DIR=/backup/web
WEB_DIR=/www_dir
##### MySQL 데이터베이스 백업 #####
# 개별 DB 백업 (권장)
# --opt 옵션은 덤프 속도를 높여줍니다.
mysqldump -uroot -pPASSWORD db_name > "$DB_BACKUP_DIR/db_name_${DATE}.sql"
# 전체 DB 백업 (필요 시 주석 해제)
# mysqldump -uroot -pPASSWORD -A > "$DB_BACKUP_DIR/all_${DATE}.sql"
##### 웹 파일 백업 (디렉터리 압축) #####
tar czfp "$WEB_BACKUP_DIR/web_${DATE}.tar.gz" "$WEB_DIR/web"
##### 오래된 백업 삭제 (7일 전 파일 정리) #####
WEEKAGO=$(date -d "7 days ago" +%Y%m%d)
# 해당 날짜 패턴을 가진 파일 삭제
rm -f "$DB_BACKUP_DIR"/*"${WEEKAGO}.sql"
rm -f "$WEB_BACKUP_DIR"/*"${WEEKAGO}.tar.gz"
##### 보안 권한 설정 #####
# 백업 파일은 소유자만 읽을 수 있도록 제한
chmod -R 600 "$WEB_BACKUP_DIR"
chmod -R 600 "$DB_BACKUP_DIR"
이 스크립트의 핵심은 WEEKAGO 변수를 이용한 자동 삭제 로직입니다. 백업만 계속 쌓이다 보면 디스크 풀(Disk Full) 장애가 발생할 수 있으므로, 반드시 보관 주기를 설정하여 삭제하는 로직이 포함되어야 합니다.
2. Crontab을 이용한 스케줄링 등록
작성한 스크립트가 매일 지정된 시간에 자동으로 실행되도록 리눅스의 스케줄러인 Crontab에 등록합니다.
먼저 스크립트에 실행 권한을 부여합니다.
chmod +x /path/to/backup.sh
그다음 시스템 크론 설정 파일(/etc/crontab)을 편집하거나, 사용자 크론(crontab -e)을 사용하여 스케줄을 등록합니다. 아래는 매일 새벽 5시에 백업을 수행하는 설정 예시입니다.
# vi /etc/crontab
# [분] [시] [일] [월] [요일] [사용자] [명령어]
0 5 * * * root /path/to/backup.sh
설정을 마친 후에는 크론 데몬을 재시작하여 변경 사항을 즉시 적용하는 것이 좋습니다.
# CentOS/RHEL 계열
systemctl restart crond
# Ubuntu/Debian 계열
systemctl restart cron
등록 전, 반드시 ./backup.sh 명령어로 수동 실행하여 에러 없이 파일이 생성되는지 검증하는 절차를 거쳐야 합니다.
3. 엔터프라이즈 운영을 위한 보안 및 최적화
실제 서비스 환경(Production)에서는 단순 백업 실행을 넘어 보안과 모니터링을 고려해야 합니다.
-
비밀번호 노출 방지:
mysqldump명령줄에 비밀번호를 직접 입력하면ps -ef명령어로 프로세스 목록 확인 시 비밀번호가 노출될 수 있습니다. 대신~/.my.cnf파일을 활용하여 인증 정보를 관리하는 것을 권장합니다.# ~/.my.cnf 예시 [mysqldump] user=backup_user password=secret_password -
로그(Log) 기록: 백업이 실패했는지 성공했는지 이력을 남기기 위해 Crontab 설정을 다음과 같이 변경하여 로그를 적재해야 합니다.
0 5 * * * root /path/to/backup.sh >> /var/log/backup.log 2>&1
💡 Tip: 2>&1은 표준 에러(stderr)를 표준 출력(stdout)으로 리다이렉션하여 로그 파일 하나에 모든 실행 결과와 에러 메시지를 함께 담겠다는 의미입니다. 이를 통해 백업 실패 원인을 파악하는 결정적인 단서를 확보할 수 있습니다.
댓글
댓글 쓰기