트러블슈팅) Mysql 도커 컨테이너 생성 시 initial sql 오류 발생

냥무룩·2023년 9월 12일
0

트러블슈팅

목록 보기
2/4

문제

프로젝트에서 mysql 컨테이너를 만들 필요가 있었다.
도커-mysql-컨테이너-초기-데이터-삽입

그런데 컨테이너 생성 후 초기 데이터를 넣어주는 과정에서 오류가 발생하였다.

// dockerfile

FROM mysql:8.0.32

ENV MYSQL_ALLOW_EMPTY_PASSWORD=true

ADD ./vms_database_init_script /docker-entrypoint-initdb.d

EXPOSE 3306

위처럼 도커파일을 만들어주었고
빌드 후 run 하였더니

이런 에러가 발생하였다.

문제가 발생한 sql 파일은

use mysql;
ALTER user root@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
CREATE USER root@'%' IDENTIFIED WITH mysql_native_password BY 'password';
CREATE USER aidev@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
CREATE USER aidev@'%' IDENTIFIED WITH mysql_native_password BY 'password';
create database pntbiz_vms default character set utf8;
GRANT ALL PRIVILEGES ON pntbiz_vms.* TO aidev@'localhost';
GRANT ALL PRIVILEGES ON pntbiz_vms.* TO aidev@'%';
flush privileges;

sql 파일들은 모두 이사님이 로컬 디비 세팅할 때 사용하셨던 sql문 이었다.

의 부분에서 2번째 줄의 CREATE USER root@'%' IDENTIFIED WITH mysql_native_password BY 'pntbiz1234';
여기 부분에서 에러가 났다.

분명 root@localhost 와 root@%는 다른 계정일텐데 create user에 오류가 발생하였다.

저 부분을 지우고 실행 시키자 다른 모든 sql문이 잘 작동 하는 것이었다.

의심든 것은 mysql 공식 이미지 였다.
혹시 컨테이너 생성시에 외부접속 권한이 있는 root 계정또한 만들어 지도록 설정해 놓은 것이 아닐까?

컨테이너 생성 시 바인딩 해둔 3305 포트로 연결해 보았다.

역시나 였다.
root@localhost 뿐 아니라 root@% 계정까지 기본적으로 생성되는 것이었다.

create user가 아닌 alter user를 했어야 했다!

ALTER user root@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
ALTER USER root@'%' IDENTIFIED WITH mysql_native_password BY 'password';

이렇게 바꾸어 주니 잘 작동하였다!!

그렇다면... 혹시 dockerfile에서

ENV MYSQL_ROOT_PASSWORD=비밀번호

이렇게 해주면 ALTER를 할 필요도 없는 것 아닐까?
dockerfile에 ENV MYSQL_ROOT_PASSWORD=비밀번호 을 추가해주고
ALTER 문을 다 지운 후에 이미지 빌드 후 컨테이너를 실행해주었다

예상대로 루트계정에 비밀번호가 제대로 들어가 있었다!

결론

mysql 공식 이미지로 컨테이너 생성시
root@localhost 와 root@% 계정이 모두 생성된다.

dockerfile에

ENV MYSQL_ROOT_PASSWORD=비밀번호

옵션을 주면
root@localhost와 root@% 계정 모두에 해당 비밀번호로 생성된다.

0개의 댓글