홈 › 리눅스 운영 › 12 / 13

백업·복구 (설정·릴리스·DB 덤프)

섹션 7진행 0 / 13

3. 코드 예제

예제 1: 백업 실행 — backup.sh 발췌

bash
cp -rp "$APP_HOME/conf" "$work/conf"
[ -f "$APP_HOME/current/app.jar" ] && cp -p "$APP_HOME/current/app.jar" "$work/app.jar"
[ -n "$DB_DUMP_CMD" ] && { eval "$DB_DUMP_CMD" > "$work/db.sql" || die "DB 덤프 실패"; }
printf 'stamp=%s\nhost=%s\napp_home=%s\n' "$STAMP" "$(hostname)" "$APP_HOME" > "$work/MANIFEST"
tar czf "$out" -C "$work" .
sha256sum "$out" > "$out.sha256"
find "$BACKUP_DIR" -name 'myapp-*.tgz*' -mtime +"$KEEP_DAYS" -delete
text
2026-09-11 09:49:47 [INFO] backup: /backup/myapp/myapp-20260911_094945.tgz (1.0K)

임시 폴더에 모아 한 번에 묶으므로 중간에 실패하면 반쪽 백업이 남지 않습니다. set -e 와 die 가 실패를 종료 코드로 알립니다.

예제 2: 검증 — backup.sh 발췌

bash
sha256sum -c "$f.sha256" >/dev/null || die "체크섬 불일치: $f"
tar tzf "$f" >/dev/null || die "tar 손상: $f"
tar xzOf "$f" ./MANIFEST
text
stamp=20260911_094945
host=app-prod-01
app_home=/opt/myapp
2026-09-11 09:49:49 [INFO] verify ok: /backup/myapp/myapp-20260911_094945.tgz

MANIFEST 가 어느 서버의 언제 백업인지 말해 줍니다. 여러 서버 백업을 한 곳에 모을 때 이 줄이 없으면 섞입니다.

예제 3: 손상 감지 — demo.sh 발췌

bash
cp "$F" broken.tgz; cp "$F.sha256" broken.tgz.sha256
printf 'x' >> broken.tgz
bash backup.sh verify broken.tgz; echo "종료 코드=$?"
text
sha256sum: WARNING: 1 computed checksum did NOT match
2026-09-11 09:49:50 [ERROR] 체크섬 불일치: broken.tgz
종료 코드=1 (1 이어야 함)

한 바이트만 붙어도 걸립니다. 반입·복사 뒤 verify 를 습관으로 두면 깨진 백업으로 복구하는 사고가 없습니다.

예제 4: 복구와 비교 — demo.sh 발췌

bash
bash backup.sh restore "$F" /tmp/restore
ls /tmp/restore /tmp/restore/conf
diff "$APP_HOME/conf/app.properties" /tmp/restore/conf/app.properties && echo "설정 일치"
cmp "$APP_HOME/current/app.jar" /tmp/restore/app.jar && echo "jar 일치"
text
/tmp/restore:
app.jar  conf  db.sql  MANIFEST
/tmp/restore/conf:
app.properties  env
설정 일치
jar 일치

운영 폴더는 건드리지 않고 복구본과 비교만 했습니다. 실제 되돌리기는 이 비교 결과를 보고 필요한 파일만 cp 합니다.