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 데이터 백업 및 복원
이때 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
https://kindmaster.tistory.com/146
https://czar.tistory.com/m/1066
'서버 인프라, 백엔드 > 도커 (DOCKER)' 카테고리의 다른 글
Docker : 리눅스에 도커 설치하기 (Ubuntu 18.04) (0) | 2021.03.26 |
---|---|
도커 : docker logs의 --tail을 이용하여 컨테이너 로그 확인하기 (0) | 2020.06.16 |
도커란? (0) | 2020.06.16 |