DevTool Hub · DB 백업 스크립트 생성기

백업 준비부터 복구 연습까지

복구할 수 있는 백업을 만들려면 명령 실행뿐 아니라 인증, 범위, 저장 공간, 복구 검증이 필요합니다. 아래 예시는 app_db라는 가상 DB를 대상으로 합니다. 실제 비밀번호나 운영 데이터는 이 페이지에 입력하지 마세요.

1. 서버에서 인증 파일 준비하기

전용 백업 계정을 만들고 필요한 읽기·메타데이터 접근 권한을 부여하세요. 필요한 권한은 옵션과 엔진 버전에 따라 다릅니다. 인증 파일 소유자를 실행 계정으로 지정하고 Unix에서는 chmod 600으로 다른 사용자의 읽기를 제한합니다. 파일은 버전 관리나 공개 디렉터리에 넣지 마세요.

MySQL: 옵션 파일

[client]
password="서버에서_직접_설정한_비밀번호"

예를 들어 /etc/db-backup/mysql.cnf에 저장하면 생성기는 --defaults-extra-file을 첫 옵션으로 지정합니다. 계정·호스트·포트는 생성기에 지정한 값을 사용합니다. 특수문자가 있는 암호의 이스케이프는 MySQL 옵션 파일 규칙을 따르세요. 이 예시는 일반 연결이며 원격 접속 시 TLS 인증서 검증 설정도 환경에 맞춰 추가해야 합니다.

PostgreSQL: 비밀번호 파일

localhost:5432:app_db:backup_user:서버에서_직접_설정한_비밀번호

콜론으로 구분한 host:port:database:user:password 형식입니다. 값에 콜론이나 역슬래시가 있으면 PostgreSQL 비밀번호 파일 규칙으로 이스케이프하세요. 생성기는 PGPASSFILE에 경로를 지정하고, 무인 실행에서 암호 프롬프트를 기다리지 않도록 --no-password를 사용합니다. Unix 권한이 느슨하면 파일이 무시될 수 있습니다.

MongoDB: Database Tools 설정 파일

password: '서버에서_직접_설정한_비밀번호'

--config를 지원하는 MongoDB Database Tools 100.3.0 이상이 필요합니다. 생성기의 기본 인증 DB는 admin입니다. 사용자가 다른 DB에 생성되었다면 출력의 --authenticationDatabase를 변경하세요. YAML 문자열의 작은따옴표는 YAML 규칙에 맞게 처리합니다. URI를 추가하는 경우 생성기의 호스트 옵션과 충돌하지 않도록 공식 문서를 확인하세요.

2. 수동 실행으로 범위 검증하기

  1. 클라이언트 버전과 서버 버전의 호환성을 확인합니다. PostgreSQL의 pg_dump는 자신보다 새로운 주 버전 서버를 덤프하지 못할 수 있습니다.
  2. 전용 경로에 스크립트를 저장한 뒤 bash -n backup.sh로 문법을 확인합니다. 이 검사는 DB 접속이나 권한을 검증하지 않습니다.
  3. 테스트 DB에서 실행한 뒤 종료 코드, 표준 오류, 완료 파일을 확인합니다. 생성기는 호스트 접근 실패나 압축 실패 시 성공 메시지를 출력하지 않습니다.
  4. 같은 엔진이라도 다른 서버·DB 백업은 서로 다른 저장 경로를 쓰면 보관 목록을 분리하기 쉽습니다.

3. 빈 테스트 DB에 복구 연습하기

아래 명령은 실제 실행 시 대상 데이터를 바꿉니다. 운영 DB가 아닌 별도 호스트의 빈 테스트 DB를 준비하고, 백업 파일명과 계정·인증 파일 경로를 환경에 맞게 바꾸세요. SQL 덤프에 운영 소유자나 확장 기능이 포함되어 있으면 먼저 테스트 환경에서 해당 의존성을 준비해야 합니다.

MySQL SQL.gz

set -o pipefail
gzip -dc -- '/backup/mysql-example.sql.gz' | mysql --defaults-extra-file='/etc/db-backup/restore.cnf' --host=localhost --user=restore_user --database=restore_test

복구용 인증 파일을 별도로 준비하고 restore_test DB를 생성한 후 실행합니다. 선택한 DB의 덤프이며 사용자 계정 전체를 복원하는 명령은 아닙니다. DEFINER나 저장 루틴의 권한 오류는 원본과 대상의 계정 구성을 비교하세요.

PostgreSQL 일반 SQL.gz

set -o pipefail
gzip -dc -- '/backup/postgres-example.sql.gz' | PGPASSFILE='/etc/db-backup/restore.pgpass' psql --host=localhost --username=restore_user --dbname=restore_test --no-password --set=ON_ERROR_STOP=on

이 도구는 일반 SQL을 만들기 때문에 psql로 읽습니다. pg_restore는 custom·directory·tar 형식 덤프용입니다. 글로벌 역할은 이 백업에 포함되지 않으므로 필요한 역할을 먼저 준비하고, 로그에 SQL 오류가 없는지 확인하세요.

MongoDB gzip 아카이브

mongorestore --config='/etc/db-backup/restore.yaml' --host=localhost --username=restore_user --authenticationDatabase=admin --gzip --archive='/backup/mongodb-example.archive.gz' --nsInclude='app_db.*' --nsFrom='app_db.*' --nsTo='restore_test.*'

대상 restore_test가 비어 있는지 먼저 확인합니다. 예시는 네임스페이스를 바꾸며 --drop을 넣지 않습니다. 호환되는 서버·도구 버전을 사용하고, 컬렉션 수·인덱스·대표 문서를 비교하세요. 사용 중 쓰기가 발생하는 데이터의 일관성 확보는 별도 계획이 필요합니다.

4. 정기 실행과 실패 알림

수동 복구가 성공한 뒤에만 cron이나 운영 스케줄러에 등록하세요. cron은 대화형 셸과 PATH가 다를 수 있으므로 명령 경로와 실행 계정의 인증 파일 접근 권한을 확인해야 합니다. 중복 실행을 막고, 종료 코드가 0이 아니거나 예정 시각에 완료 파일이 없으면 알림을 받도록 구성하세요. 이 생성기에는 스케줄러·알림 서버가 포함되어 있지 않습니다.

원격 전송은 SSH 키와 호스트 키 확인이 선행되어야 합니다. 원격 경로에는 계정@호스트:/절대/경로 형식을 사용합니다. 현재 파일만 전송하며 원격에서 사라져야 할 파일을 자동 판단하지 않습니다. 원격 사본의 보관 정리는 별도로 검토하세요.

5. 오류별 다음 확인 사항

작은 화면에서는 표를 좌우로 스크롤할 수 있습니다.

현상확인할 항목
command not foundDB 클라이언트와 gzip, mktemp 설치, 스케줄러의 PATH
Access denied / authentication failed실행 계정의 인증 파일 읽기 권한, 접속 호스트, DB 계정 권한
Permission denied / No space left저장 경로 소유자, 여유 공간, 임시 덤프와 압축 과정의 필요 공간
rsync 실패SSH 키·호스트 키, 대상 경로 권한, 네트워크. 로컬 완료 파일은 별도로 확인
복구 중 역할·확장 기능 오류엔진 버전과 대상 환경의 역할·확장 기능을 준비한 후 빈 DB에서 재검증

공식 자료

설정에 맞는 스크립트 만들기 →