Docker에 MySQL import하기

Programmingzi·2024년 2월 13일

원래 계획은 Docker에서 파이썬 파일을 실행하면, MySQL에 데이터가 적재되도록 만들 생각이었다.

하지만, 로컬에서 잘 동작하던 코드가 도커에서는 계속 문제를 발생시켰다.
예를 들어, 도커는 리눅스 컨테이너 기반 기술이기 때문에 UI가 없다. 크롤링을 위해 사용했던 셀레니움은 브라우저(크롬)을 열어서 HTML 파일 등을 불러오기 때문에 창이 뜨지 않도록 별도 로직을 구현해야 한다.

또한, HTTP Request를 너무 많이 호출해서 에러가 발생하는 등 로컬환경에서는 잘 동작하지만, 컨테이너에서 실행 시 에러가 발생하였고, 로컬에서 디버깅을 할 수 없기 때문에 굉장히 개발하기가 어려웠다.

따라서, 로컬환경에서 파이썬 파일을 실행해서 DB에 데이터를 적재하면, 이 데이터를 컨테이너에서 import해서 가져오도록 구현했다.

로컬 → MySQL 컨테이너로 데이터 export하기

1. MySQL 이미지 pull

2. MySQL 컨테이너 실행

docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=<password> -d -p 3305:3306 mysql:latest

3. MySQL 컨테이너에서 DB 생성

docker exec -it 컨테이너이름 bash
mysql -u root -p
CREATE DATABASE db명 default CHARACTER SET UTF8;

3. 로컬에서 import

mysqldump –u DB사용자 –p DB명 > 파일명

로컬의 터미널에서 데이터를 import하는 명령어를 작성한다.

4. docker container에 데이터 복사

docker cp 파일명 containerID:저장파일명


위에서 import한 파일을 컨테이너에 복사한다.

5. container 접속해서 컨테이너에 export

docker exec -it 컨테이너ID /bin/bash
mysql -u root -p db명 < import한 파일명

컨테이너에서 데이터를 select해보자

다음과 같이 한글이 깨지는 것을 확인할 수 있다.

리눅스 명령어로 Locale 설정 변경

bash로 돌아가서 locale을 확인해보면, POSIX로 되어있을 것이다.

$ locale

locale을 UTF-8로 변경한다.

$ export LC_ALL="C.UTF-8"
$ export LANG="C.UTF-8"

참고
https://devpunch.tistory.com/18
https://0soo.tistory.com/239

0개의 댓글