원샷: mysqldump 백업 + gzip + 보관 기간(rotate)

단일 DB를 mysqldump로 백업하고, 압축/파일명 타임스탬프/삭제 기준까지 포함한 스크립트

분야: 데이터베이스 mysqlbackupmysqldumpops

백업은 “파일이 생겼다”가 아니라 “복구가 된다”가 기준입니다.

관련 가이드: 백업 설계: 복구 가능 + secrets 제외

관련 용어: mysqldump, 트랜잭션

스크립트 예시

비밀번호는 스크립트에 하드코딩하지 말고, .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 되는지” 확인합니다.
  • 앱이 읽는 테이블/인덱스가 정상인지까지 확인하면 더 좋습니다.

같은 분야의 템플릿