DB에 큰 수정을 가하는 작업을 하다보면 어떠한 작업 전에 DB를 백업해둬야 하는 상황이 언제나 생긴다.
처음에는 이 작업을 자동화 하기 위해서 Linux 배치파일을 작성하여 Crontab에 등록 정해진 시간에 백업을 하는 방법을 생각했으나 그렇게 한다면 Crontab에 등록된 스케줄 사이사이의 데이터에 대해서는 보장하지 못한다.
그래서 그냥 서버도 건들지 않고 윈도우 내부에 bat파일을 만들어 해결하기로 했다.
bat파일이 내보낼 결과물(output)은 {테이블 이름}{백업된 시간}.sql파일이다.
윈도우 bat파일에서 시간을 표현하는 것은 생각보다 까다롭다.
최신의 프로그래밍 언어처럼 format(date, yyyy-mm-dd) 등의 편리한 함수가 없기 때문
나의 경우에는 yyyy-mm-dd-hh-mm-ss의 형식으로 표현하길 원했는데
그 방법은 아래와 같이 하면 된다.
echo %date%
set yyyy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
set hh=%time:~0,2%
set mm=%time:~3,2%
set ss=%time:~6,2%
set timeInfo=%yyyy%%mm%%dd%%hh%%mm%%ss%
echo %timeInfo%
이렇게 입력하면 yyyymmddhhmmss형식의 시간 정보를 얻을 수 있고
그 이후에는
"C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqldump.exe" --user=... --password=... --host=... --protocol=tcp --port=3306 --default-character-set=utf8 --result-file="%anylocation%.sql" --skip-triggers --no-create-info "%db_name%" "%table_name"
의 형식으로 작성하면 된다.
단, mysql dump의 위치, 저장될 위치, host, port 등은 개인마다 정보가 다르니 직접 입력해주어야 한다.
해당 옵션들에 대해 궁금하다면
https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html
이곳을 참조하면 된다.
궁금한 점이 있다면 댓글을 남겨주시길..