mysqldump 자동 백업 cron 설정은 운영 서버의 가장 기본적인 안전망입니다. 플러그인 백업(UpdraftPlus 등)도 좋지만, 서버에서 직접 mysqldump로 DB를 덤프하는 방식은 호스팅·플러그인에 의존하지 않는 독립적인 백업입니다. 플러그인 오류로 자동 백업이 실패하더라도 서버 cron 백업은 별도로 돌아갑니다.
# 단순 DB 덤프
mysqldump -u 사용자명 -p 비밀번호 DB명 > backup.sql
# 비밀번호를 옵션 파일에서 읽어서 실행 (권장)
mysqldump --defaults-file=/root/.my.cnf DB명 > backup.sql
비밀번호를 스크립트에 직접 쓰면 보안상 좋지 않습니다. /root/.my.cnf 파일에 저장하는 방식이 안전합니다.
# /root/.my.cnf 생성
cat > /root/.my.cnf << 'EOF'
[mysqldump]
user=백업용사용자
password=강력한비밀번호
EOF
chmod 600 /root/.my.cnf
#!/bin/bash
# /usr/local/bin/db-backup.sh
DB_NAME="hospital_wp"
BACKUP_DIR="/var/backups/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
KEEP_DAYS=7 # 7일치 보관
mkdir -p $BACKUP_DIR
# DB 덤프
mysqldump --defaults-file=/root/.my.cnf \
--single-transaction \
--routines \
$DB_NAME | gzip > "$BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz"
echo "$(date): DB 백업 완료 - ${DB_NAME}_${DATE}.sql.gz"
# 오래된 백업 삭제
find $BACKUP_DIR -name "*.sql.gz" -mtime +$KEEP_DAYS -delete
echo "$(date): ${KEEP_DAYS}일 이전 백업 삭제"
옵션 설명:
--single-transaction: InnoDB 테이블을 락 없이 일관된 상태로 덤프--routines: 저장 프로시저 포함gzip: 압축해서 용량 절약chmod +x /usr/local/bin/db-backup.sh
sudo crontab -e
# 매일 새벽 2시 DB 백업
0 2 * * * /usr/local/bin/db-backup.sh >> /var/log/db-backup.log 2>&1
서버 자체에만 백업 보관하면 서버 장애 시 백업도 없어집니다.
# 백업 후 rsync로 원격 전송
rsync -avz /var/backups/mysql/ backup-server:/remote/backups/mysql/
또는 구글 드라이브나 S3에 업로드하는 스크립트를 추가합니다. DB 백업은 오프사이트 보관이 원칙입니다.
AI가 초안을 생성하고, 의료기관 인프라 운영자가 1차 데이터 기반으로 최종 검수·승인합니다.
작성·검수: WavePix 운영자 (의료기관 3곳 인프라 전담)