원샷: mysqldump 백업 + gzip + 보관 기간(rotate)
단일 DB를 mysqldump로 백업하고, 압축/파일명 타임스탬프/삭제 기준까지 포함한 스크립트
백업은 “파일이 생겼다”가 아니라 “복구가 된다”가 기준입니다.
관련 가이드: 백업 설계: 복구 가능 + secrets 제외
스크립트 예시
비밀번호는 스크립트에 하드코딩하지 말고,
.my.cnf또는 전용 설정 파일(권한 600)로 분리하세요.
export DB_NAME="appdb"
export OUT_DIR="/var/backups/mysql"
export KEEP_DAYS="7"
sudo bash -euo pipefail <<'BASH'
set -euo pipefail
: "${DB_NAME:?DB_NAME is required}"
: "${OUT_DIR:?OUT_DIR is required}"
: "${KEEP_DAYS:?KEEP_DAYS is required}"
ts="$(date +%Y%m%d_%H%M%S)"
mkdir -p "$OUT_DIR"
mysqldump \
--single-transaction \
--routines --triggers --events \
"$DB_NAME" \
| gzip -9 >"$OUT_DIR/${DB_NAME}_${ts}.sql.gz"
find "$OUT_DIR" -type f -name "${DB_NAME}_*.sql.gz" -mtime +"$KEEP_DAYS" -delete
echo "done: $OUT_DIR/${DB_NAME}_${ts}.sql.gz"
BASH
복구 리허설(최소)
- 다른 DB에 복원해서 “실제로 import 되는지” 확인합니다.
- 앱이 읽는 테이블/인덱스가 정상인지까지 확인하면 더 좋습니다.