2010년 5월 1일, 2막

Windows용 MySQL 백업 배치 파일 만들기 본문

Computer/Tips

Windows용 MySQL 백업 배치 파일 만들기

창천(蒼天) 2020. 9. 2. 13:26

 

@ECHO OFF

ECHO MySQL 데이터베이스 백업 시작



FOR /F "tokens=1-3 delims=- " %%a IN ('DATE /T') DO (SET dt=%%a-%%b-%%c)

FOR /F "tokens=1-4 delims=:." %%a IN ('ECHO %TIME%') DO (SET tm=%%a%%b%%c%%d)

SET backupfilename=_%dt%_%tm%.sql

ECHO 백업파일명: %backupfilename%



mysqldump --routines -uusername -ppassword dbname > E:\data\backup\"dbname%backupfilename%"



ECHO 오래된 백업을 삭제

FORFILES /P E:\data\backup /S /M *.sql /D -3 /C "cmd /c del @file"

ECHO 백업 완료


 

1. 먼저 백업 파일 이름에 들어갈 날짜 부분을 만듭니다.

 

FOR /F "tokens=1-3 delims=- " %%a IN ('DATE /T') DO (SET dt=%%a-%%b-%%c)

 

- DATE /T 명령을 명령행에서 내려보면 YYYY-MM-DD 형태의 날짜가 출력됩니다. 이 문자열을  "- " 를 분리자로 분리하면 세 개의 토큰이 만들어지는데 각각이  %a, %b, %c 가 되는 것입니다. 이것을 변수 dt 에 저장합니다.

 

FOR /F "tokens=1-4 delims=:." %%a IN ('ECHO %TIME%') DO (SET tm=%%a%%b%%c%%d)

 

- ECHO %TIME% 를 실행하면 HH:MM:SS.SS 형태의 시간이 출력됩니다. 이 문자열을 ":." 를 분리자로 분리하면 네 개의 토큰이 만들어지고 각각이 %a, %b, %c, %d 가 됩니다. 이것을 변수 tm 에 저장합니다.

 

SET backupfilename=_%dt%_%tm%.sql

 

- 백업 파일의 이름은 데이터베이스 이름에 _YYYY-MM-DD_HHMMSSSS.sql 가 붙는 형태로 만들어 집니다.

 

 

2. 데이터베이스를 백업합니다.

 

mysqldump --routines -uusername -ppassword dbname > E:\data\backup\"dbname%backupfilename%"

 

- mysqldump 명령으로 백업합니다. --routines 옵션은 저장 프로시저도 백업하라는 것입니다.

 

 

3. 오래된 백업 파일을 삭제합니다.

 

FORFILES /P E:\data\backup /S /M *.sql /D -3 /C "cmd /c del @file"

 

- /P E:\data\backup : 검색을 시작할 경로를 지정합니다.

- /S : 하위폴더를 포함 하도록 지정합니다.

- /M *.sql : 검색 마스크에 따라 파일을 검색합니다. '*' 이 기본 검색 마스크입니다.

- /D -3 : 3일 지난 파일을 찾습니다. +/-를 사용해서 0~32768 까지 지정할 수 있습니다.

- /C "cmd /c del @file" : 각 파일에 실행할 명령어를 지정합니다. 명령 문자열은 큰따옴표로 묶어야 합니다.

 

 

이제 백업을 수행하고, 오래된 파일을 삭제하는 batch 파일을 만들어 보았습니다. 이 파일을 윈도우즈 작업 스케줄러를 사용해서 주기적으로 실행하면 되겠습니다.

 




출처: https://offbyone.tistory.com/258 [쉬고 싶은 개발자]

 

4. 작업 스케줄러에 배치파일 등록

배치파일을 "dbbackup.bat"로 생성했다고 하면

작업 스케줄러 트리거는 하루에 한번 지정한 시간에 실행하는 것으로 설정

 

 

동작은 생성한 배치파일을 지정합니다.

 

 

이제 하루에 한번 날짜명으로 된 db 덤프 백업이 자동으로 이루어집니다.

출처 : https://apost.kr/355