Skip to content

Docker mysql

BOHYEON SEO edited this page Nov 19, 2019 · 4 revisions

mysql

목표

  1. docker 에서 mysql 이 실행되도록 하기
  2. (필요하다면) 네트워크 설정
  3. 초기 데이터 삽입 (shell script일수도 있고, 어떤 식이 될지는 아직 모름)
  4. Password 정해야 하고 (code-avengers26)
  5. Password를 환경변수로 빼는 방법을 찾아야 한다.
  6. ncloud에 docker-mysql이 실행되고 있을 때, 외부에서 접속이 가능한지?
  7. 초기 데이터를 volume에 넣어줄 것인지? script로 매번 넣어줄 것인지?
  8. Db 생성, table 생성 등을 어떻게 해줄 것인지?
  9. 유저 생성 - drstrange
  10. Database 이름 정하기 - BooleanAvengers

기타 목표

  1. mysql 에서 기본 설치 되고 33060 포트로 열리는 X plugin 이 뭔지 확인하기
  2. CD가 PR 성공 언제 이뤄지게 할 것인지? 를 정해야 mysql 작업을 push할 수 있다.
    1. Merge 될때 CD가 이뤄지게할 수 있는지?

5. Password 환경변수

  1. MYSQL_ROOT_PASSWORD environment 옵션에서 직접적으로 password 입력
    • 가장 보안이 낮은 선택지이다.
  2. Password 파일을 컨테이너 내에 bind-mounting(?) 하여 MYSQL_ROOT_PASSWORD이 해당 파일을 가리키게 하기(4번과 비슷?하나 secret사용이 없는 형태인듯 하다.)
  3. 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
  4. Docker swarm에서만 사용가능한 secret을 이용해서 로컬 컴퓨터의 txt파일을 암호화해서 패스워드를 넘겨주기(로컬 컴퓨터에 txt파일을 보관해야 하는 큰 단점이 있음)

9. 유저 생성

8. 초기 데이터

  • db생성까지는 docker file 내에서 설정해줄 수 있음
  • table생성부터 데이터 삽입까지 .sql

다른 컨테이너로부터 MySQL 컨테이너에 연결하기

7. 초기 데이터 넣는 방법

trouble-shooting

  1. docker를 이용한 mysql이 제대로 실행되지 않았음
    environment:
      - MYSQL_ROOT_PASSWORD=bella
# mysql을 실행할 때 비밀번호 관련 옵션을 제대로 넣어주지 않아서 였음
# 비밀번호를 설정하던지, 비밀번호를 설정하지 않도록 하던지 해줬어야 한다.
  1. 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 옵션이란 ?

  1. 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.

  1. 클라이언트 측에서 한글 깨짐 문제
  • 임의의 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/
Clone this wiki locally