관리 메뉴

번데기 개발자의 메모장

Docker : mysqldump를 이용하여 백업 및 마이그레이션 본문

서버 개발 (AWS, DOCKER 등)/도커 (DOCKER)

Docker : mysqldump를 이용하여 백업 및 마이그레이션

번데기 개발자 2021. 9. 28. 01:25
반응형

 

docker의 mysql 컨테이너

docker를 사용하다 보면 mysql, mongodb와 같은 데이터베이스 컨테이너를 활용하여 쉽게 DB 서버를 구축할 때가 많습니다.

 

저는 mysql 컨테이너를 이용하여 간단한 프로젝트에서 DB를 구축해서 테스트 및 배포를 진행하여 보았습니다.

 

docker를 통한 mysql 설치는 아래 링크를 참고해주세요.

 

** 저는 docker image로 mysql 5.7 버전을 사용하였습니다 **

 

http://jmlim.github.io/docker/2019/07/30/docker-mysql-setup/

 

Docker를 통한 MySQL 설치하기. · 기억하기 위한 개발노트

Docker를 통한 MySQL 설치하기. 30 Jul 2019 | Docker docker MySQL 도커 Mysql Docker 한글문제 2020-02-26 에 한글깨짐 관련 내용 추가 함. 이 글에선 docker에서 MySQL을 설정하는 방법과 docker를 통해 설치한 MySQL에 접

jmlim.github.io

 

docker에서 mysql 데이터 백업 및 복원

 

이때 local DB의 데이터를 배포한 서버로 옮겨야 하는 필요성이 생겼습니다. 

 

보통 mysql만 local에 설치했을때는 mysqldump를 사용해서 mysql 데이터를 백업 및 복원 하였는데요

 

docker를 사용하여 mysql을 이용할때도 mysqldump를 사용할 수 있는 방법이 있었습니다.

 

그래서 저는 mysqldump를 통해 백업파일을 만들고 서버에서 mysqldump 복원을 통해 데이터를 마이그래이션을 성공할 수 있었습니다.

 

그럼 이제 간단하게 해당 명령어를 정리해보겠습니다.

 

 

mysqldump를 이용한 docker에서 mysql 데이터 백업 및 복원 명령어 정리

 

테이블에 대한 백업파일 만들기

 

#docker exec [컨테이너 이름] /usr/bin/mysqldump -u [사용자 계정] -p [패스워드] [데이터베이스명] [원본 백업받을 테이블명] > [백업받을 테이블명].sql

예제는 아래와 같습니다.

#docker exec 3372c8ac483a /usr/bin/mysqldump -u root --password=root lotto-backend > backup.sql

 

실제로 동작시켜본 화면입니다. 

 

 

Warning이 나오는데 이유는 잘 모르겠습니다. (아시는분 알려주시면 감사하겠습니다.)

 

backup을 마치면 backup.sql이 생성되는 것을 확인할 수 있습니다.

 

 

테이블 복원하기

 

#cat [백업된 테이블].sql | docker exec -i [컨테이너 이름] /usr/local/mysql -u [사용자 계정] -p [패스워드] [복원할 DB]

예제는 아래와 같습니다.

#cat backup_20210829.sql | docker exec -i 385efc09cfd7 /usr/bin/mysql -u root --password=root lotto-backend

실제로 동작 시켜본 화면입니다.

 

 

저는 로또 프로젝트를 개인적으로 진행하고 있어서 아래와 같은 데이터가 복원된것을 확인하실 수 있습니다.

 

 

잘 적용이 안되거나 에러가 나는 경우 truble shooting 

 

가끔 권한이나 mysql 오류때문에 안되는 경우가 있는데 저는 아래 방법으로 시도해 보니까 해결이 되었습니다.

 

확실한 방법인지는 잘 모르겠지만 참고하시길 바랍니다.

 

방법 1

 

docker exec -it container /bin/bash // 컨테이너 접속
vim /etc/mysql/mysql.conf.d/mysqld.cnf // myusqld.cnf 수정

위의 방법으로 mysqld.cnf파일에 접근합니다.

 

bind-address    = 0.0.0.0

bind-address를 0.0.0.0 으로 바꿔줍니다.

 

 

 

방법 2

 

docker exec -it container /bin/bash // 컨테이너 접속 
mysql -u root -p // mysql 터미널 접속

위의 방법으로 mysql 터미널에 접속합니다.

mysql> grant all privileges on *.* to ‘USER’@‘%’ identified by ‘PASS’
mysql> grant all privileges on *.* to ‘root’@‘%’ identified by ‘root’
mysql> flush privileges;

USER와 ROOT에 모든 권한을 부여합니다. 

 

mysql>CREATE USER 'test'@'%' IDENTIFIED BY 'password';
mysql>GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' WITH GRANT OPTION;

 

또는 새로운 계정을 만들어서 모든 권한을 부여하고 해당 계정을 통해 mysqldump를 실행하는 방법도 있습니다.

 

에러 수정할때 참고하였던 링크들인데 자세히 보시면 답을 찾을수 있을 거라 생각합니다 :)

 

https://zetawiki.com/wiki/MySQL_%EC%9B%90%EA%B2%A9_%EC%A0%91%EC%86%8D_%ED%97%88%EC%9A%A9

 

MySQL 원격 접속 허용 - 제타위키

다음 문자열 포함...

zetawiki.com

https://kindmaster.tistory.com/146

 

Mysql 외부접속 허용 방법

Mysql 외부 접속 방법 1. Mysql 환경설정 확인 하기 콘솔 창에서 mysql 접속 - 접속시 mysql 버전을 확인하세요 버전별로 상세 설정이 조금 다릅니다. ggachi@ggachinet:~$ mysql -u root -p Enter password: Welc..

kindmaster.tistory.com

 

https://czar.tistory.com/m/1066

 

[Docker][MySQL]Access denied for user ‘’@’172.17.0.1'(using password: YES)

[Docker][MySQL]Access denied for user ‘’@’172.17.0.1'(using password: YES) Solution: Step 1: access MySQL through docker container docker exec -it mysql -uroot -p Enter password: Welcome to the M..

czar.tistory.com

 

 

반응형
Tag
,
2 Comments
댓글쓰기 폼