보리차
docker에 mysql 설치하기 본문
마지막으로 내가 가장 고생했던 mysql설치하는 법이다..
이상하게 시행착오가 많았다.
우선 docker mysql 컨테이너를 생성하고 실행해야 하는데 여러 방법이 있지만 나는 docker-compose.yml 파일을 이용해 생성을 했다.
version: '3' # 파일 규격 버전
services:
db: # 서비스 명
image: mysql:latest # 사용할 이미지
container_name: mysql # 컨테이너 이름 설정
environment:
- MYSQL_DATABASE=emotionDiary # db 이름
- MYSQL_ROOT_PASSWORD=password
- TZ=Asia/Seoul
command:
- --lower_cate_table_names=1 # 대소문자 구분
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
volumes:
- ./db:/var/lib/mysql # db 볼륨 처리
ports:
- 3306:3306 # 접근 포트 설정 (외부:내부)
다음과 같이 작성한 후 docker-compose 파일을 실행한다.
docker-compose up -d
여기서 docker-compose 명령어가 없으니 설치하라는 메세지가 뜬다. 당황하지 말고 하란대로 설치해주면 된다.
이미지와 컨테이너가 잘 생성됐음을 확인한 후 컨테이너에 접속한다.
docker exec -it mysql /bin/bash
mysql 접속
mysql>mysql -u root -p 비밀번호
사용자 확인
mysql>select user, host from mysql.user;
mysql 유저 생성
mysql>CREATE USER '계정명'@'%' IDENTIFIED BY '비밀번호';
# 이때 % 는 모든 외부접속을 허용하는 옵션이다.
사용자 권한 부여
mysql> grant all privileges on <DB이름>.<테이블이름> to '사용자id'@호스트;
mysql> flush privileges; // 변경된 권한 적용
위의 명령어에서 all 대신 insert, select, update 등으로 바꾸면 특정 권한만 부여할 수 있다.
DB이름.테이블이름 대신 DB이름.*로 하면 해당 DB의 모든 테이블에 대한 권한을 부여할 수 있다 (*.*은 모든 접근 가능)
이렇게 해주면 외부에서 db에 접근을 할 수 있다.
여기서 끝내면 안되고 다시 backend 컨테이너에 접속해준다.
현재 flask 와 mysql을 연동하는 코드는 config.py에 작성되어 있는데 다음과 같다.
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://'+username+':'+db_pw+'@localhost:3306/diary?charset=utf8mb4'
여기서 localhost 를 127.17.0.1 로 수정해줘야 한다. 이 부분은 정확히 이해하지 못했는데 나름 이해한 바로 설명을 해보자면 localhost는 같은 vm 내부에 있는 mysql에 접근할 경우를 말하지만 우리는 mysql과 flask가 다른 container에 각각 배포했기 때문에 host 에 open해놓은 3306 port를 통해 접속해야한다. 그래서 mysql의 ip주소를 입력해주는 것 같다. (틀린 내용이라면 댓글로 남겨주세요..)
아무튼 flask 설정까지 수정했다면 이제 app.py가 있는 폴더로 가서 db를 초기화해준다.
flask db init
flask db migrate
flask db upgrade
flask가 mysql에 잘 접속했다면 에러가 뜨지않고 무사히 마이그레이션을 완료할 수 있다.
끝!!
정말이지 험난한 여정이었다. 여기에 미처 적지 못한 수많은 오류들이 더 있었는데 같은 글에 적으면 너무 헷갈릴거 같아서 언젠가 시간이 남을 때 따로 작성해보겠다. 아무튼 코치님께서 도와주시지 않았다면 해결하지 못했을 것 같다 ㅜㅜ 특히 mysql같은 경우 항상 로컬에서 접속하도록 작업해왔는데 이번에 처음으로 외부접속 설정을 해보면서 이해가 잘 가지 않아 삽질을 했던 것 같다. 사실 아직도 다 이해되진 않지만 일단 서버가 무사히 잘 돌아가는 것에 의의를 두며.. 마무리 하겠다.
진짜 끝!!
'프로젝트 > 자연어처리 팀프로젝트' 카테고리의 다른 글
docker에 Flask 배포하기 (0) | 2021.12.03 |
---|---|
docker 환경 설정하기 (0) | 2021.12.03 |