반응형
MySQL 데이터를 안전하게 보호하려면 백업을 주기적으로 자동 수행해야 한다.
수동으로 하는 백업은 사람이 까먹을 수도 있고, 장애 상황에서 복구 시점이 오래될 위험이 있다.
이 글에서는 mysqldump를 활용한 백업 스크립트 작성부터 crontab 등록, 백업 압축, 삭제 정책, S3 연동까지 모두 정리한다.

✅ 자동 백업을 위한 기본 구성요소
- 백업 대상 DB 이름
- 백업 저장 경로
- 파일명에 날짜 포함
- mysqldump 명령
- 에러 로깅
- 일정 주기 실행 (crontab)
- 보관 주기 설정 (삭제 or 외부 업로드)
🧪 가장 기본적인 자동 백업 스크립트
#!/bin/bash
DATE=$(date +%F)
DB_USER="root"
DB_PASS="비밀번호"
DB_NAME="mydb"
BACKUP_DIR="/home/backup/mysql"
LOG_FILE="${BACKUP_DIR}/backup_${DATE}.log"
mkdir -p ${BACKUP_DIR}
mysqldump -u ${DB_USER} -p${DB_PASS} \
--single-transaction --routines --events \
${DB_NAME} > ${BACKUP_DIR}/${DB_NAME}_${DATE}.sql 2>> ${LOG_FILE}
스크립트에 실행 권한 부여
chmod +x /home/backup/backup.sh
반응형
📆 crontab에 등록하여 매일 자동 실행
crontab -e
예: 매일 새벽 3시 실행
0 3 * * * /home/backup/backup.sh
Tip: 스크립트 로그가 길어질 경우 logrotate 사용도 고려
📦 백업 파일 압축 추가
백업 용량이 커질 경우 .sql을 .tar.gz로 압축하여 저장 가능
tar -czf ${BACKUP_DIR}/${DB_NAME}_${DATE}.tar.gz ${BACKUP_DIR}/${DB_NAME}_${DATE}.sql
rm ${BACKUP_DIR}/${DB_NAME}_${DATE}.sql
압축 후 .tar.gz 파일만 유지하면 디스크 공간을 절약할 수 있다.
🧹 일정 기간 지난 파일 삭제 (보관 정책 적용)
예: 7일 지난 백업 자동 삭제
find ${BACKUP_DIR} -name "*.tar.gz" -type f -mtime +7 -exec rm {} \;
보안 정책 또는 디스크 용량 제한이 있는 시스템에서 유용하다.
☁️ AWS S3에 자동 업로드 연동 (선택 사항)
AWS CLI 설치 및 설정 후, 아래처럼 백업 파일을 S3로 업로드할 수 있다.
aws s3 cp ${BACKUP_DIR}/${DB_NAME}_${DATE}.tar.gz s3://my-backup-bucket/mysql/
스크립트에 통합하면 외부 백업까지 완성된다.
반응형
📂 전체 자동화 스크립트 통합 버전
#!/bin/bash
DATE=$(date +%F)
DB_USER="root"
DB_PASS="password"
DB_NAME="mydb"
BACKUP_DIR="/home/backup/mysql"
S3_BUCKET="s3://my-backup-bucket/mysql"
mkdir -p ${BACKUP_DIR}
# 백업
mysqldump -u ${DB_USER} -p${DB_PASS} --single-transaction --routines --events \
${DB_NAME} > ${BACKUP_DIR}/${DB_NAME}_${DATE}.sql
# 압축
tar -czf ${BACKUP_DIR}/${DB_NAME}_${DATE}.tar.gz ${BACKUP_DIR}/${DB_NAME}_${DATE}.sql
rm ${BACKUP_DIR}/${DB_NAME}_${DATE}.sql
# S3 업로드
aws s3 cp ${BACKUP_DIR}/${DB_NAME}_${DATE}.tar.gz ${S3_BUCKET}
# 7일 이전 파일 삭제
find ${BACKUP_DIR} -name "*.tar.gz" -type f -mtime +7 -exec rm {} \;
🧠 실무 운영 포인트
- 백업 실패 시 관리자 이메일 전송도 고려 (mailx, sendmail)
- 백업 로그는 /var/log/mysql_backup.log 등에 따로 저장
- 복수 DB 백업 시 --databases 또는 for 루프 사용
- 이중화된 NAS or 클라우드 업로드는 강력히 추천
✅ 정리
- mysqldump는 자동화 스크립트를 통해 매일 안정적으로 백업 가능하다.
- 날짜, 로그, 압축, 삭제 등 실무 백업 관리의 모든 요소를 스크립트에 포함해야 한다.
- crontab을 활용하면 무중단 백업 시스템을 만들 수 있다.
- AWS S3 업로드를 포함하면 보관 안정성이 크게 올라간다.
- 반드시 정기적인 복원 테스트를 병행해야 실전 대응력이 생긴다.
🔗 공식 문서 참고
MySQL 8.0 Reference Manual - mysqldump — A Database Backup Program
반응형
'DB' 카테고리의 다른 글
| [MySQL] (환경설정3️⃣) 정렬 성능 향상: sort_buffer_size 설정법 (1) | 2025.07.14 |
|---|---|
| [MySQL] (환경설정2️⃣) InnoDB Buffer Pool 최적화 전략 (2) | 2025.07.14 |
| [MySQL] (환경설정1️⃣) my.cnf 구조와 설정 항목 총정리 (0) | 2025.07.14 |
| [MySQL] (백업/복구6️⃣) 백업 복구 실수 방지 체크리스트와 실무 팁 💡 (4) | 2025.07.12 |
| [MySQL] (백업/복구4️⃣) PITR(Point In Time Recovery) 원리와 설정 실습 (2) | 2025.07.12 |
| [MySQL] (백업/복구3️⃣) Binary Log 기반 백업 전략과 설정법 (2) | 2025.07.12 |
| [MySQL] (백업/복구2️⃣) mysqldump 백업과 복원 방법 완벽 가이드 (0) | 2025.07.12 |
| [MySQL] (백업/복구1️⃣) 백업의 모든 것: 개념, 필요성, 전략 총정리 (0) | 2025.07.12 |