- Add Dockerfile.backup for backup container - Add backup.py script with PostgreSQL backup functionality - Add backup service to docker-compose.prod.yml - Update env.production.example with backup configuration - Add db/README.md with backup system documentation Features: - Automated daily backups (07:30, 18:00) - Local and FTP remote backup support - 7-day retention policy - PostgreSQL 16 client for waceplm database
112 lines
2.6 KiB
Markdown
112 lines
2.6 KiB
Markdown
# 데이터베이스 백업 시스템
|
|
|
|
## 개요
|
|
PostgreSQL 데이터베이스를 자동으로 백업하는 시스템입니다.
|
|
- 하루 2회 자동 백업 (오전 7:30, 오후 6:00)
|
|
- 로컬 백업 및 FTP 원격 백업 지원
|
|
- 7일 이상 된 백업 자동 삭제
|
|
|
|
## 파일 구성
|
|
- `backup.py`: 백업 스크립트
|
|
- `00-create-roles.sh`: 데이터베이스 역할 생성 스크립트
|
|
- `dbexport.pgsql`: 데이터베이스 덤프 파일
|
|
|
|
## 설정 방법
|
|
|
|
### 1. 환경 변수 설정
|
|
`.env.production` 파일에 다음 설정을 추가:
|
|
|
|
```bash
|
|
# 필수 설정
|
|
POSTGRES_HOST=wace-plm-db
|
|
POSTGRES_DOCKER_PORT=5432
|
|
POSTGRES_USER=postgres
|
|
POSTGRES_PASSWORD=your_password
|
|
POSTGRES_DB=waceplm
|
|
LOCAL_BACKUP_PATH=/backups/local
|
|
BACKUP_RETENTION_DAYS=7
|
|
BACKUP_TIME_AM=07:30
|
|
BACKUP_TIME_PM=18:00
|
|
|
|
# 선택 설정 (FTP 원격 백업)
|
|
FTP_HOST=ftp.example.com
|
|
FTP_USER=backup_user
|
|
FTP_PASSWORD=ftp_password
|
|
FTP_PATH=/backups
|
|
FTP_PORT=2122
|
|
```
|
|
|
|
### 2. Docker Compose 실행
|
|
```bash
|
|
# 백업 서비스 포함하여 실행
|
|
docker-compose -f docker-compose.prod.yml up -d
|
|
|
|
# 백업 서비스만 재시작
|
|
docker-compose -f docker-compose.prod.yml restart wace-plm-backup
|
|
```
|
|
|
|
### 3. 백업 확인
|
|
```bash
|
|
# 백업 로그 확인
|
|
docker logs -f wace-plm-backup
|
|
|
|
# 백업 파일 확인
|
|
ls -lh /home/wace-plm/backups/
|
|
```
|
|
|
|
## 수동 백업 실행
|
|
|
|
### 즉시 백업 실행
|
|
```bash
|
|
docker exec wace-plm-backup python -c "from backup import backup_databases; backup_databases()"
|
|
```
|
|
|
|
### 백업 파일 복원
|
|
```bash
|
|
# 백업 파일 확인
|
|
ls /home/wace-plm/backups/
|
|
|
|
# 복원 실행
|
|
docker exec -i wace-plm-db psql -U postgres -d waceplm < /home/wace-plm/backups/waceplm_backup_YYYYMMDD_HHMMSS.sql
|
|
```
|
|
|
|
## 백업 스케줄
|
|
- **오전 백업**: 매일 07:30
|
|
- **오후 백업**: 매일 18:00
|
|
- **자동 삭제**: 7일 이상 된 백업 파일
|
|
|
|
## 트러블슈팅
|
|
|
|
### 백업이 실행되지 않는 경우
|
|
```bash
|
|
# 컨테이너 상태 확인
|
|
docker ps | grep backup
|
|
|
|
# 로그 확인
|
|
docker logs wace-plm-backup
|
|
|
|
# 환경 변수 확인
|
|
docker exec wace-plm-backup env | grep POSTGRES
|
|
```
|
|
|
|
### 디스크 공간 부족
|
|
```bash
|
|
# 백업 파일 크기 확인
|
|
du -sh /home/wace-plm/backups/
|
|
|
|
# 오래된 백업 수동 삭제
|
|
find /home/wace-plm/backups/ -name "*.sql" -mtime +7 -delete
|
|
```
|
|
|
|
### FTP 업로드 실패
|
|
- FTP 서버 접속 정보 확인
|
|
- 방화벽 설정 확인
|
|
- FTP 경로 권한 확인
|
|
|
|
## 주의사항
|
|
1. 백업 파일은 민감한 정보를 포함하므로 접근 권한 관리 필요
|
|
2. 충분한 디스크 공간 확보 필요 (데이터베이스 크기의 최소 10배 권장)
|
|
3. FTP 비밀번호는 반드시 환경 변수로 관리
|
|
4. 정기적으로 복원 테스트 수행 권장
|
|
|