백엔드DB / SQL
3

Windows에서 Docker MySQL 자동 백업 설정하기 (feat. 작업 스케줄러)

이 글은 미니PC에서 Docker로 운영 중인 MySQL DB를 Windows PC에서 자동 백업하는 방법을 다룹니다.

Windows에서 Docker MySQL 자동 백업 설정하기 (feat. 작업 스케줄러)

환경 구성

항목내용
백업 실행 환경Windows PC
DB 서버외부 미니PC (Ubuntu)
DB 구성Docker 컨테이너로 MySQL 8.0 운영
백업 저장 위치로컬 PC (D:\project\new_blog_backup)
백업 도구mysqldump (MySQL ZIP Archive)

1단계: MySQL Client 설치 (mysqldump 확보)

MySQL 서버 설치 없이 mysqldump.exe만 필요하므로 ZIP Archive를 사용합니다.

  1. MySQL 다운로드 페이지 접속
  2. Operating System: Microsoft Windows 선택
  3. Windows (x86, 64-bit), ZIP Archive 다운로드
    • MSI Installer ❌ (서버까지 설치됨)
    • ZIP Archive ✅ (압축만 풀면 사용 가능)
  4. 압축 해제 후 bin 폴더 안에 mysqldump.exe 확인

💡 ZIP 방식은 설치가 없어 폴더 삭제만으로 제거 가능합니다.


2단계: DB 계정 권한 설정

백업 계정이 대상 DB에 접근 권한이 있어야 합니다. 미니PC에 SSH 접속 후 진행합니다.

# MySQL 컨테이너 접속
docker exec -it blog-v1-mysql mysql -u root -p
-- 백업 계정에 권한 부여
GRANT ALL PRIVILEGES ON blog_v2.* TO 'blog_v1'@'%';
FLUSH PRIVILEGES;

-- 권한 확인
SHOW GRANTS FOR 'blog_v1'@'%';

3단계: backup.bat 스크립트 작성

D:\project\new_blog_backup\backup.bat 파일을 생성하고 아래 내용을 작성합니다.

@echo off
setlocal

:: ── 설정 ──────────────────────────────────────
set DB_USER=your_user
set DB_PASS=your_password
set DB_NAME=your_database
set DB_HOST=192.168.xx.xx
set DB_PORT=3306
set BACKUP_DIR=D:\project\new_blog_backup
set KEEP_DAYS=30
set MYSQLDUMP_PATH="C:\경로\mysql-x.x.x-winx64\bin\mysqldump.exe"

:: ── 날짜/시간 포맷 ─────────────────────────────
set DATE=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%
set DATE=%DATE: =0%
set FILE_NAME=%DB_NAME%_%DATE%.sql

:: ── 백업 폴더 생성 ─────────────────────────────
if not exist "%BACKUP_DIR%" mkdir "%BACKUP_DIR%"

:: ── 백업 실행 ──────────────────────────────────
%MYSQLDUMP_PATH% -h %DB_HOST% -P %DB_PORT% -u %DB_USER% -p%DB_PASS% --no-tablespaces %DB_NAME% > "%BACKUP_DIR%\%FILE_NAME%"

:: ── 오래된 파일 삭제 (30일 초과) ──────────────
forfiles /p "%BACKUP_DIR%" /s /m *.sql /d -%KEEP_DAYS% /c "cmd /c del @path" 2>nul

echo [%date% %time%] 백업 완료: %BACKUP_DIR%\%FILE_NAME%

주요 옵션 설명

옵션설명
-hDB 서버 호스트 (IP)
-P포트 번호
--no-tablespacestablespace 덤프 제외 (권한 오류 방지)
KEEP_DAYS=3030일 지난 백업 파일 자동 삭제

4단계: 수동 테스트

스크립트를 실행해서 정상 동작하는지 확인합니다.

backup.bat 더블클릭 실행
→ D:\project\new_blog_backup\ 폴더에 .sql 파일 생성 확인
→ 파일 크기가 0KB면 실패, 1KB 이상이면 성공

5단계: 작업 스케줄러 등록 (자동화)

  1. Win + Rtaskschd.msc 실행
  2. 오른쪽 패널 → [기본 작업 만들기] 클릭
  3. 이름/설명 입력 후 [다음]
  4. 트리거: 매일 → 시작 시간 02:00:00[다음]
  5. 동작: 프로그램 시작[다음]
  6. 프로그램 설정:
    프로그램/스크립트: C:\경로\backup.bat
    인수 추가: (비워둠)
    시작 위치: (비워둠)
    
  7. [마침] 클릭

등록 후 정상 동작 확인

작업 스케줄러 라이브러리 → 해당 작업 우클릭 → [실행]
→ 하단 [마지막 실행 결과]: "작업이 완료되었습니다." ✅
→ D:\project\new_blog_backup\ 에 새 .sql 파일 생성 확인

트러블슈팅

❌ 백업 파일이 0KB

원인: mysqldump 경로 오류 또는 DB 접속 실패
해결: CMD에서 직접 실행해 에러 메시지 확인
     "C:\경로\mysqldump.exe" --version

❌ Access denied; PROCESS privilege

원인: 계정에 tablespace 접근 권한 없음
해결: --no-tablespaces 옵션 추가

❌ Access denied for user to database

원인: 백업 계정이 해당 DB에 접근 권한 없음
해결: MySQL root 접속 후 GRANT 권한 부여
     GRANT ALL PRIVILEGES ON db_name.* TO 'user'@'%';
     FLUSH PRIVILEGES;

마치며

이제 매일 새벽 2시에 자동으로 DB 백업이 실행되고, 30일이 지난 파일은 자동 삭제됩니다. 백업은 만드는 것보다 복원 테스트가 더 중요하다는 점을 잊지 마세요.

-- 복원 방법
mysql -h 호스트 -u 계정 -p 데이터베이스명 < backup.sql
#mysql#덤프#백업

댓글

(0)
Windows에서 Docker MySQL 자동 백업 설정하기 (feat. 작업 스케줄러) | 강민석의 개발블로그