-
Notifications
You must be signed in to change notification settings - Fork 10
Docker mysql
BOHYEON SEO edited this page Nov 19, 2019
·
4 revisions
- docker 에서 mysql 이 실행되도록 하기
- (필요하다면) 네트워크 설정
- 초기 데이터 삽입 (shell script일수도 있고, 어떤 식이 될지는 아직 모름)
- Password 정해야 하고 (code-avengers26)
- Password를 환경변수로 빼는 방법을 찾아야 한다.
- ncloud에 docker-mysql이 실행되고 있을 때, 외부에서 접속이 가능한지?
- 초기 데이터를 volume에 넣어줄 것인지? script로 매번 넣어줄 것인지?
- Db 생성, table 생성 등을 어떻게 해줄 것인지?
- 유저 생성 - drstrange
- Database 이름 정하기 - BooleanAvengers
- mysql 에서 기본 설치 되고 33060 포트로 열리는 X plugin 이 뭔지 확인하기
- CD가 PR 성공 언제 이뤄지게 할 것인지? 를 정해야 mysql 작업을 push할 수 있다.
- Merge 될때 CD가 이뤄지게할 수 있는지?
- MYSQL_ROOT_PASSWORD environment 옵션에서 직접적으로 password 입력
- 가장 보안이 낮은 선택지이다.
- Password 파일을 컨테이너 내에 bind-mounting(?) 하여 MYSQL_ROOT_PASSWORD이 해당 파일을 가리키게 하기(4번과 비슷?하나 secret사용이 없는 형태인듯 하다.)
- MYSQL_RANDOM_ROOT_PASSWORD 를 사용하거나, 5.6버전 이상인 경우 MYSQL_RANDOM_ROOT_PASSWORD와 MYSQL_ONETIME_PASSWORD를 결합하여 사용하도록 권장하고 있다.
- Now, the recommended way is to generate a one-time password upon first run using the MYSQL_RANDOM_ROOT_PASSWORD and MYSQL_ONETIME_PASSWORD variables, and then set a secure password after the container initialization is complete. This will lead to only limited exposure of the password in the presumably short interval between container init and first time use, and is thus strongly recommended over the other available options
- Docker swarm에서만 사용가능한 secret을 이용해서 로컬 컴퓨터의 txt파일을 암호화해서 패스워드를 넘겨주기(로컬 컴퓨터에 txt파일을 보관해야 하는 큰 단점이 있음)
- https://dev.mysql.com/doc/refman/8.0/en/docker-mysql-more-topics.html#docker_var_mysql_user_password
- db생성까지는 docker file 내에서 설정해줄 수 있음
- table생성부터 데이터 삽입까지 .sql
-
MySQL :: MySQL 8.0 Reference Manual :: 2.5.6.2 More Topics on Deploying MySQL Server with Docker
-
참고
- Docker Secrets 항목 확인 (https://hub.docker.com/_/mysql)
- https://mysqlrelease.com/2017/08/docker-secrets-and-mysql-password-management/
- docker secret | Docker Documentation
- Manage sensitive data with Docker secrets | Docker Documentation
- Build Enhancements for Docker | Docker Documentation
- MySQL :: MySQL 8.0 Reference Manual :: 2.5.6.1 Basic Steps for MySQL Server Deployment with Docker
- MYSQL_DATABASE option (https://hub.docker.com/_/mysql)
- database 이름 정해주는 것
- Customize your MySQL Database in Docker - Better Programming - Medium
- docker를 이용한 mysql이 제대로 실행되지 않았음
environment:
- MYSQL_ROOT_PASSWORD=bella
# mysql을 실행할 때 비밀번호 관련 옵션을 제대로 넣어주지 않아서 였음
# 비밀번호를 설정하던지, 비밀번호를 설정하지 않도록 하던지 해줬어야 한다.
- docker에 mysql을 설치하고 실행하려 했지만 아래와 같은 에러 메세지가 뜨고 실행되지 않음
✘ bhseo@BoHyeonui-MacBookPro ~/pg3 docker exec mysql mysql -u root -p
Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
-> 해결법 : 옵션으로 -it를 넣어주면 enter password가 뜨고 비밀번호를 입력하면 정상적으로 mysql에 접속된다. -> it 옵션이란 ?
- Docker run으로 Dockerfile을 실행하면 mysql이 잘 실행됐고, root 계정, 새로 만든 계정으로도 접속이 됐으나 docker-compose up —build로 실행하면 비밀번호 오류가 났었음.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
-> 해결법 : docker-compose 에서 volume을 설정해서 였었음. Docker-compose up --build -V 로 새로운 volume 할당하는 식으로 했더니 문제 없이 됐다.
-> -V
: -V, —renew-anon-volumes | Recreate anonymous volumes instead of retrieving data from the previous containers.
- 클라이언트 측에서 한글 깨짐 문제
- 임의의 configuration 파일을 만들어줬다.
[client]
default-character-set = utf8
[mysqld]
init_connect = SET collation_connection = utf8_general_ci
init_connect = SET NAMES utf8
character-set-server = utf8
collation-server = utf8_general_ci
skip-character-set-client-handshake
[mysqldump]
default-character-set = utf8
[mysql]
default-character-set = utf8
- mysql Dockerfile에서 해당 cnf파일을 이용하도록 함
FROM mysql
ENV MYSQL_ROOT_PASSWORD password
ENV MYSQL_USER user
ENV MYSQL_PASSWORD password
ENV MYSQL_DATABASE db
COPY ./utf8.cnf /etc/mysql/conf.d/
COPY ./initdb.sql /docker-entrypoint-initdb.d/
-
skip-character-set-client-handshake
를 cnf파일에 넣어주기 전에는 제대로 작동하지 않았으나, 넣어준 뒤 한글 깨짐 문제가 해결됐음 -
show variables like ‘character%’;
- mysql에서 위 스크립트를 입력해서 언어 설정을 확인할 수 있다.
-
mysql-docker build시 아래와 같은 옵션을 넣어주면 가능하다는 답이 많았으나 잘 작동하지 않았다.
—character-set-server=utf8mb4 —collation-server=utf8mb4_unicode_ci
-
참고