백엔드›DB / SQL•
3분
•Windows에서 Docker MySQL 자동 백업 설정하기 (feat. 작업 스케줄러)
이 글은 미니PC에서 Docker로 운영 중인 MySQL DB를 Windows PC에서 자동 백업하는 방법을 다룹니다.
환경 구성
| 항목 | 내용 |
|---|---|
| 백업 실행 환경 | 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를 사용합니다.
- MySQL 다운로드 페이지 접속
- Operating System: Microsoft Windows 선택
- Windows (x86, 64-bit), ZIP Archive 다운로드
- MSI Installer ❌ (서버까지 설치됨)
- ZIP Archive ✅ (압축만 풀면 사용 가능)
- 압축 해제 후
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%
주요 옵션 설명
| 옵션 | 설명 |
|---|---|
-h | DB 서버 호스트 (IP) |
-P | 포트 번호 |
--no-tablespaces | tablespace 덤프 제외 (권한 오류 방지) |
KEEP_DAYS=30 | 30일 지난 백업 파일 자동 삭제 |
4단계: 수동 테스트
스크립트를 실행해서 정상 동작하는지 확인합니다.
backup.bat 더블클릭 실행
→ D:\project\new_blog_backup\ 폴더에 .sql 파일 생성 확인
→ 파일 크기가 0KB면 실패, 1KB 이상이면 성공
5단계: 작업 스케줄러 등록 (자동화)
Win + R→taskschd.msc실행- 오른쪽 패널 → [기본 작업 만들기] 클릭
- 이름/설명 입력 후 [다음]
- 트리거: 매일 → 시작 시간 02:00:00 → [다음]
- 동작: 프로그램 시작 → [다음]
- 프로그램 설정:
프로그램/스크립트: C:\경로\backup.bat 인수 추가: (비워둠) 시작 위치: (비워둠) - [마침] 클릭
등록 후 정상 동작 확인
작업 스케줄러 라이브러리 → 해당 작업 우클릭 → [실행]
→ 하단 [마지막 실행 결과]: "작업이 완료되었습니다." ✅
→ 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