| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- dbeaver
- svn
- devlog
- javascript
- SQL Server
- urlshortner
- reCAPTCHA
- STS
- jquery
- Tomcat
- Oracle
- IntelliJ
- mybatis
- Java
- mysql
- spring
- node.js
- my sql
- maria db
- TIP
- 정보처리기사
- programmers
- html
- Mac
- js
- Eclipse
- windows
- SQL
- shorturl
- Linux
Archives
- Today
- Total
고양의 성장일기
[Docker] Docker Container 내에서 DB 복원하기 본문
반응형
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를 복원하는 일반적인 방식입니다.
하지만 굳이 도커를 묻혀 글을 쓴 이유는, 리눅스 호스트와 도커 컨테이너를 오가며 작업하는게 너무나 헷갈렸기 때문입니다.
감사합니다!
반응형
