본문 바로가기
BackEnd/Server

[Docker] MYSQL Database 로컬 위치로 백업하기

by 푸고배 2021. 5. 18.

Docker 환경에서 동작하는 MYSQL Database를 mysqldump를 이용해 로컬 위치에 sql 파일을 저장하고자 한다.

 

 1. Mysql Database 백업하는 bash 파일 만들기 

우선 아래 명령어를 입력해 도커 컨테이너에 접속한다.

root@[docker_id]:/ 로 접속 정보가 변경되었다면 컨테이너 접속에 성공한 것이다. 

sudo docker exec -it [docker_container_name] bash

* 도커 컨테이너 확인 명령어 : sudo docker ps

 

vi [bash_file_name].sh로 아래와 같은 코드를 입력한다.

 

/usr/local/mysql/bin/mysqldump -u root -p[password] [database_name] > /[backup_directory]/[database_name]_$(date '+%Y_%m_%d).sql

 

mysqldump 명령어를 이용해서 [database_name]을 [database_name]_년_월_일.sql과 같은 이름의 파일로 백업(저장)하는 구문이다.

 

mysqldump 명령어를 바로 사용하면 환경에 따라 에러가 생기는 경우가 있어 /usr/local/mysql/bin/mysqldump와 같은 절대경로를 사용하는 것이 좋다.(절대경로는 다를 수 있으므로 확인)

 

작성이 완료되면 esc -> :wq로 파일을 저장한 다음, sh [bash_file_name].sh로 bash 파일을 실행한다.

 

backup_directory로 이동해보면 sql 파일이 하나 생긴 것을 확인 할 수 있다.

 

 2. 로컬에서 Docker Container 내부 Bash 파일 실행 시키기 

sudo docker exec [docker_container_name] sh [bash_file_name].sh

 

명령어를 이용해서 Docker Container 내부의 Bash 파일을 실행 시킬 수 있다.

위에서 생성된 sql 파일을 삭제 후 로컬 환경으로 빠져나와 위의 명령어를 입력하면, 아까와 같은 위치에 같은 파일이 생성되는 것을 알 수 있다.

 

 3. Crontab을 이용해 자동화하기 

Crontab을 이용하면 특정 명령어를 반복 실행 시킬 수 있다.

2번을 필요할 때마다 실행하여, 데이터베이스를 백업해도 되지만, 좀 더 주기적으로 백업을 이용하기 위해서 crontab을 사용하기로 한다.

 

sudo crontab -e

 

명령어를 입력하면 crontab을 명령어 수정이 가능하다.

주기는 사용자가 설정하고 싶은 주기(매 분마다, 매 시간 마다, 매일, 일주일에 한번, 한 달에 한번 등)로 해당 명령어를 실행하는 것인데, 0 1 1 * * [command]는 매월 1일 1시마다 해당 command를 실행하겠다는 의미이다. 

command에 sudo를 뺀 2번 명령어를 넣어주면 된다.

 

여기까지만 해줘도 백업 자동화에는 문제가 없지만, docker 환경이 아닌 로컬 환경에 백업 파일을 저장하고 싶은 경우가 있다. 그런 경우에는 crontab 명령어에 아래와 같은 명령어를 추가한다.

주기는 백업을 실행하는 명령어와 조금의 시간 차이를 두는 것이 안전하다.

(예시에서는 매월 1일 1시 1분마다 docker 환경에 생성된 sql 파일을 로컬에 복사함) 

 

docker cp [docker_container_name]:/[file_location]/[backup_file_name].sql /[copy_file_location_in_local]/[file_name].sql

 

crontab과 mysqldump를 이용해 Mysql Database 자동 백업 환경 만들기 끝

 

 

 

 

 

 

 

반응형

댓글