Docker에서 MySQL Dump

Ssol·2022년 5월 25일
0

Docker

목록 보기
1/2

현재 내가 맡은 서비스는 컨테이너를 사용해서 배포/운영하고, 모든 컨테이너는 docker-compose를 통해 컨트롤하고 있다.

테스트 서버에서 기존 DB 컨테이너의 데이터를 유지한 채, 새로운 클론 DB 컨테이너를 만들어 DB를 갈아끼우고 기존 데이터를 복제해서 테스트 데이터를 추가해 이런 저런 테스트를 해보고 싶다. 어떻게 하면 될까?

도커 허브에 기존 DB 이미지를 만들어 올리고 내려 받아 쓰는 방법도 있지만 다른 방법을 사용해보려 한다.

바로 도커 내부 MySQL에 접근해 데이터 dump를 생성해 활용하는 것!


일단 기존 DB의 데이터를 백업 해와야 한다

docker-compose.yml 파일에서 로컬의 db_dump 폴더와 컨테이너 내부의 db_backup 폴더의 볼륨을 일치시켜 줘서 해당 위치에 명령어가 들어있는 sh 파일을 생성하면 로컬에도 동일한 파일이 생기게 된다

# db 컨테이너 내부로 접속
sudo docker exec -it db bash

# 볼륨을 잡아둔 폴더로 이동
cd db_backup

# vim 편집기로 쉘스크립트 파일 생성
vim db_back.sh

sh 파일에 들어갈 스크립트는 다음과 같다
exec mysqldump -u root -p --all-databases > /db_backup/mysql_backup.sql

## /db_backup 해당 경로에 lc_backup.sql 이란 백업 파일 생성
## 위 경우는 모든 스키마를 백업. 한 개의 스키마만 선택해서 백업하려면
## exec mysqldump -u root [스키마_명] > /[백업파일_생성경로]/[백업파일_이름].sql

mysqldump 명령을 통해 모든 스키마 혹은 개별 스키마를 원하는 경로에 백업 해주자

이제 로컬의 db_dump 폴더에 보면 db_backup.sh 파일과 DB 백업용 덤프 파일인 mysql_backup.sql 파일이 들어있을 것이다

docker-compose의 DB 설정을 클론 DB로 바꿔준 후 다음 명령어로 바뀐 부분만 컨테이너를 새로 올려주면 된다

# compose에 묶인 컨테이너 중 변경된 컨테이너만 재실행
# 갈아끼울 DB 컨테이너만 재실행 된다
sudo docker-compose up -d --build

이렇게 올라간 클론 DB 컨테이너는 당연히 새 DB라서 스키마도 테이블도 없겠지?
여기에 dump 했던 데이터를 덮어쓰도록 하자

컨테이너 내부에는 볼륨 설정을 해주면서 로컬의 db_dump 폴더와 연동이된 db_backup 폴더가 있다
이 곳에는 원본 DB에서 생성한 dump 파일과 백업용 sh 파일이 들어있을 것이다


이곳에 있는 dump 파일로 DB를 덮어쓰는 명령이 있는 sh 파일을 만들어 주자
# db 컨테이너 내부로 접속
sudo docker exec -it db bash

# 볼륨을 잡아둔 폴더로 이동
cd db_backup

# vim 에디터로 덤프한 데이터를 덮어쓰는 명령어 파일을 만들어 준다
vim db_backup_insert.sh

sh 파일에 들어갈 dump 덮어쓰기 명령은 다음과 같다

exec mysql -u root -p < /db_backup/mysql_backup.sql
# 데이터 복구는 덤프의 반대
# 복원할 스키마 정보는 덤프 파일 안에 모두 들어있으니 반대 꺽쇠 기호와 덤프 파일 이름만 적어주면 된다

이제 이 sh 파일을 실행시켜주면

# 클론 DB 컨테이너에서 덤프 복원파일 실행
sh db_backup_insert.sh

기존 DB에 들어있던 데이터가 모두 클론 DB 컨테이너에 들어가게 된다

이렇게 작성한 sh파일과 dump 파일이 있으니 데이터 복구도 쉽고, 원본 데이터가 필요할 땐 원래 DB로 갈아끼워주기만 하면 되니 이제 DB 걱정 없이 내 맘대로 테스트하면 된다!👍

profile
Junior Back-end Developer 🫠

0개의 댓글