MySQL 백업 및 복구 완벽 가이드: 데이터 손실 제로 달성하기
MySQL 데이터베이스 백업과 복구 실전 가이드. mysqldump, binlog를 활용한 완벽한 백업 전략을 배웁니다.
럿지 AI 팀
4분 읽기
목차
MySQL 백업 및 복구 가이드
백업 전략
3-2-1 규칙
- **3**개의 복사본
- **2**개의 다른 미디어
- **1**개는 오프사이트
1. 전체 백업 (mysqldump)
기본 백업
``
bash
mysqldump -u root -p --all-databases > backup_full.sql
`
특정 DB만
`bash
mysqldump -u root -p mydatabase > backup_mydatabase.sql
`
특정 테이블만
`bash
mysqldump -u root -p mydatabase orders > backup_orders.sql
`
옵션 추가 (권장)
`bash
mysqldump -u root -p \
--single-transaction \ # InnoDB 일관성
--routines \ # 프로시저 포함
--triggers \ # 트리거 포함
--events \ # 이벤트 포함
--all-databases > backup.sql
`
2. 증분 백업 (Binary Log)
binlog 활성화
`sql
-- my.cnf 설정
[mysqld]
log-bin=mysql-bin
expire_logs_days=7
`
binlog 확인
`sql
SHOW BINARY LOGS;
-- 결과:
-- mysql-bin.000001
-- mysql-bin.000002
-- mysql-bin.000003
`
binlog 백업
`bash
cp /var/lib/mysql/mysql-bin.* /backup/binlog/
`
3. 자동화 스크립트
`bash
#!/bin/bash
backup.sh
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup/mysql"
1. 전체 백업 (주 1회 - 일요일)
if [ $(date +%u) -eq 7 ]; then
mysqldump -u root -p$DB_PASSWORD \
--single-transaction \
--all-databases > $BACKUP_DIR/full_$DATE.sql
gzip $BACKUP_DIR/full_$DATE.sql
fi
2. binlog 백업 (매일)
cp /var/lib/mysql/mysql-bin.* $BACKUP_DIR/binlog/
3. 오래된 백업 삭제 (30일 이상)
find $BACKUP_DIR -mtime +30 -delete
`
cron 등록
`bash
매일 새벽 2시 실행
0 2 * * * /path/to/backup.sh
`
4. 복구 시나리오
Case 1: 전체 복구
`bash
백업 파일 압축 해제
gunzip backup_full.sql.gz
복구
mysql -u root -p < backup_full.sql
`
Case 2: 특정 DB만
`bash
mysql -u root -p mydatabase < backup_mydatabase.sql
`
Case 3: 특정 시점 복구 (PITR)
`bash
1. 전체 백업 복구 (12:00)
mysql -u root -p < backup_full_20240128_120000.sql
2. binlog 적용 (12:00 ~ 14:30)
mysqlbinlog mysql-bin.000001 \
--start-datetime="2024-01-28 12:00:00" \
--stop-datetime="2024-01-28 14:30:00" \
| mysql -u root -p
결과: 14:30 시점으로 복구!
`
Case 4: 잘못된 쿼리 복구
`bash
예: 14:25에 실수로 DELETE 실행
1. 14:25 직전까지 복구
mysqlbinlog mysql-bin.000001 \
--stop-datetime="2024-01-28 14:24:59" \
| mysql -u root -p
2. DELETE 쿼리 건너뛰고 이후 복구
mysqlbinlog mysql-bin.000001 \
--start-position=12345 \ # DELETE 이후 position
| mysql -u root -p
`
5. 테스트 복구
정기적 테스트 (월 1회)
`bash
#!/bin/bash
test_recovery.sh
1. 테스트 서버에 복구
mysql -h test-server -u root -p < backup_full.sql
2. 데이터 검증
mysql -h test-server -u root -p -e "
SELECT COUNT(*) FROM mydatabase.orders;
SELECT COUNT(*) FROM mydatabase.members;
"
3. 결과 로그 저장
`
6. 클라우드 백업
AWS S3로 백업
`bash
백업 후 S3 업로드
mysqldump -u root -p --all-databases | gzip | \
aws s3 cp - s3://my-bucket/backup_$(date +%Y%m%d).sql.gz
`
자동 암호화
`bash
백업 + 암호화 + S3
mysqldump -u root -p --all-databases | \
gzip | \
openssl enc -aes-256-cbc -salt -out backup.sql.gz.enc
aws s3 cp backup.sql.gz.enc s3://my-bucket/
`
7. 모니터링
백업 성공 확인
`bash
#!/bin/bash
check_backup.sh
최신 백업 파일 확인
LATEST_BACKUP=$(ls -t /backup/mysql/full_*.sql.gz | head -1)
24시간 이내 백업 확인
if [ $(find $LATEST_BACKUP -mtime -1 | wc -l) -eq 0 ]; then
echo "ERROR: 최근 백업 없음!" | mail -s "Backup Alert" admin@example.com
fi
``핵심 체크리스트
백업
- [ ] 전체 백업 (주 1회)
- [ ] binlog 백업 (매일)
- [ ] 오프사이트 백업
- [ ] 암호화
- [ ] 자동화
복구
- [ ] 복구 절차 문서화
- [ ] 정기 복구 테스트
- [ ] 복구 시간 측정
- [ ] 담당자 교육
더 배우기
김영한의 실전 데이터베이스
- DB 관리 심화
- 재해 복구
- 고가용성
---
**태그**: #MySQL백업 #데이터복구 #mysqldump #binlog #재해복구
L
럿지 AI 팀
AI 기술과 비즈니스 혁신을 선도하는 럿지 AI의 콘텐츠 팀입니다.
관련 포스트
뉴스
2025 데이터베이스 시장 전망: MySQL이 여전히 1위, 클라우드 DB 급성장
2025년 데이터베이스 시장 분석. MySQL 점유율 1위 유지, AWS RDS·Azure DB 등 클라우드 DB 시장 연 25% 성장.
•4분 읽기
튜토리얼
B2B SEO 완벽 가이드: 의사결정권자를 검색으로 확보하는 법
B2B 기업을 위한 SEO 전략. 영업 없이 리드를 자동으로 확보하는 검색 최적화 완벽 가이드입니다.
•1분 읽기
튜토리얼
백링크 완벽 가이드: 초보자도 이해하는 SEO의 핵심
백링크가 무엇인지, 왜 중요한지, 어떻게 만들어야 하는지 초보자도 쉽게 이해할 수 있도록 완벽 정리한 가이드입니다.
•4분 읽기