고양의 성장일기

[Docker] Docker Container 내에서 DB 복원하기 본문

카테고리 없음

[Docker] Docker Container 내에서 DB 복원하기

고 양 2026. 1. 9. 19:09
반응형
Docker Container 내에서 DB 복원하기

2026년 들어 프로젝트 하나를 전담하게 되었습니다.

기존 담당하던 업제로부터 데이터베이스 덤프 파일을 전달받았는데 용량이 1.9GB에 달해 일반적인 에디터로는 열람조차 어려웠습니다.

 

하는 수 없이 리눅스에서 표준 입력 리다이렉션 방식으로 데이터베이스를 복원했는데,

나중에 기억력이 쇠퇴했을 때 찾아보기 위해서 방법을 정리해두도록 하겠습니다.

표준 입력 리다이렉션 방식 (STDIN redirection)

리눅스 CLI에서 아래와 같이 SQL 파일을 표준 입력으로 바로 실행하는 방식

mysql -u user -p db_name < dump.sql

도커 컨테이너명 확인하기

먼저 데이터베이스로서 기능하고 있는 컨테이너를 찾아서 배쉬 접속을 해야합니다.

docker ps

docker exec -it <mariadb_container_name> bash

덤프 파일 복사하기

그런 다음 준비된 덤프파일을 컨테이너 내부로 복사해줍니다.

-- .sql 파일의 경우
docker cp dump.sql <mariadb_container_name>:/tmp/dump.sql 

-- .tar 파일의 경우
docker cp dump.tar.gz <mariadb_container_name>:/tmp/dump.tar.gz

tar 파일을 들고 들어왔다면 압축도 풀어주도록 합니다.

cd /tmp
tar -xvzf ctgs.tar.gz

데이터베이스 설정 점검하기

데이터베이스에서 컬레이션이나 권한 등 점검해야 할 사항이 있다면 덤프 파일을 실행하기 전 미리 점검하도록 합시다.

저는 이 과정에서 2시간 이상 삽질을 했습니다.

덤프 파일 실행하기

준비가 되었다면 컨테이너 내에서 덤프 파일을 실행해줍니다.

단일 파일의 경우 아래와 같이 한 번에 실행해도 무방하지만,

mysql -u <user_name> -p <database_name> < /tmp/dump.sql

DB 스키마, 데이터, 프로시저 등으로 분리되어있다면 반드시 순서를 지켜 실행하도록 합니다.

많은 경우, 함수 내부에서 테이블 유무를 참조하기 때문입니다.

mysql -u <user_name> -p <database_name> < schema.sql
mysql -u <user_name> -p <database_name> < data.sql
mysql -u <user_name> -p <database_name> < function.sql

마치며

사실 이 방식은, 굳이 도커가 아니라도 일반적인 리눅스에서 DB를 복원하는 일반적인 방식입니다.

하지만 굳이 도커를 묻혀 글을 쓴 이유는, 리눅스 호스트와 도커 컨테이너를 오가며 작업하는게 너무나 헷갈렸기 때문입니다.

 

감사합니다!

반응형