dinist

기존 mariadb 데이터를 docker의 mariadb에 복원하기 본문

리눅스/Docker

기존 mariadb 데이터를 docker의 mariadb에 복원하기

dinist 2021. 1. 28. 17:30

지난번에 docker를 사용한 mariadb 설치및 외부접속 테스트까지 진행해봤습니다.

이번에는 기존에 라즈베리파이에서 사용중이던 mariadb의 데이터베이스를 백업하여 docker의 mariadb 컨테이너로

복원하는 작업을 해보겠습니다.

 

데이터 백업

먼저 백업된 데이터가 저장될 디렉터리로 이동해줍니다.

그리고 호스트의 mariadb에서 데이터베이스를 백업해줍니다. 저는 하나의 데이터베이스만 백업할 것입니다.

 

mysqldump -u root --password=비밀번호 [데이터베이스명] > 백업파일명.sql

mysqldump를 활용하여 데이터를 백업합니다. 만약 데이터베이스가 여러개 있는상태라면 다음과 같이 진행합니다.

// 모든 데이터베이스 백업
mysqldump -u root --password=비밀번호 -A > 백업파일명.sql

// 여러 데이터베이스중 특정 데이터베이스를 선택해 백업
mysqldump -u root --password=비밀번호 --database 데이터베이스명 > 백업파일명.sql

 

mysqldump는 적은용량의 데이터에서 사용하기 좋습니다. 만약 데이터가 많으면 시간이 꽤 오래 걸릴 것입니다.

 

컨테이너 커밋(commit) 하기

 

그런데 이전에 mariadb 컨테이너를 만들때 볼륨설정을 안해줬습니다. 이미 실행중인 컨테이너에 볼륨을 추가할 수는 없어서 현재 실행중인 컨테이너를 그대로 커밋합니다. (그대로 복제한다고 생각하시면 됩니다.)

 

docker container commit [컨테이너 이름] [저장될 이미지이름]

 

이전에 만든 mariadb_1 컨테이너가 실행중입니다. 이 컨테이너를 커밋하겠습니다.

커밋 이후에 sha256 해시값이 출력되네요 앞선 커밋으로 새로운 도커 이미지가 만들어졌습니다.

이 새로운 이미지를 컨테이너를 생성하겠습니다. 일단 이전에 만든 컨테이너는 중지시키겠습니다.

 

커밋한 이미지로 컨테이너 생성하기

docker container stop mariadb_1

그리고 새로운 컨테이너를 생성합니다.

docker container run -d -p 33066:3306 -v "$PWD":/var/lib/mysql/dbbackup --name mariadb_container mariadb_vim


-v 옵션은 볼륨을 추가합니다.
"$PWD"는 현재 작업 디렉터리 환경변수 입니다.

앞서 mysqldump로 백업 sql파일을 만들고 디렉터리 변경을 하지 않았습니다.
그래서 현재 작업 디렉터리는 mysqldump의 백업 sql이 저장된 디렉터리입니다.

이 현재 작업 디렉터리를 mariadb 컨테이너의 /var/lib/mysql/dbbackup 경로에 매칭하겠다는 의미입니다.

container ps로 확인해봅시다.

 

두가지가 있는데 Exited된 컨테이너는 아까 제가 종료한 컨테이너(이전에 생성한 컨테이너) 입니다.

Exited된 컨테이너는 추후에 삭제할 것입니다.

 

그러면 새로 생성된 컨테이너의 터미널에 접속하여 파일이 잘 있는지 확인해봅시다.

docker exec -it mariadb_container bash

터미널의 호스트명이 달라졌습니다. 컨테이너의 터미널에 잘 접속이 되었습니다.

이제 아까 매칭한 디렉터리로 이동하여 데이터가 잘 있는지 확인해봅시다.

네 sql파일이 잘 있네요

 

sql파일 복원하기

이제 백업한 sql파일을 가지고 복원을 해봅시다.

mysql -uroot -p < 백업파일명.sql

 

아마 오류가 발생할것입니다.

컨테이너의 mariadb에는 백업당시의 database가 없기 때문입니다. 그래서 알수없는 데이터베이스 오류가 발생할것입니다. 그래서 database만 create 해주고 나옵시다.

 

mariadb -uroot -p

create database db명

그리고 다시 명령을 진행해봅시다.

그러면 오류 없이 잘 진행될것입니다.

 

데이터가 잘 조회됩니다.