도커 허브에 올라온 공식 MySql 컨테이너를 실행하면 언제 어디서든 아주 쉽게 동일한 MySql 환경을 구축할 수 있습니다. MySql 컨테이너는 8 버전으로 진행했습니다.
공식 도커 허브에 나와있는 설명대로 하면 1분도 안되서 MySql 환경을 누구나 만들 수 있습니다. 하지만 단순히 아래와 같은 명령어로 컨테이너를 만들면 안되고 볼륨도 마운트 해야하고 MySql에서의 시간, 시스템 환경 변수 등도 설정해주어야 합니다.
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
그 중 이번 글에서 sql-mode 라는 MySql에서 사용되는 시스템 변수에 대해 알아보겠습니다.
sql-mode란?
MySql에 저장될 데이터에 대한 유효성 검사 범위를 설정하는 시스템 변수입니다.
sql-mode에 활성화 하고자 하는 모드를 , 구분자로 구분하여 한줄로 추가 할 수 있습니다.
또한 MySql 버전별로 default_sql_mode 값이 다르며, 이를 커스터 마이징 할 수 있습니다.
SELECT @@sql_mode;
위 쿼리문으로 현재 MySql의 시스템 변수를 확인할 수 있습니다.
MySql 컨테이너를 실행 한 후 group by 를 사용하는 쿼리문을 날릴 시 "SELECT list is not in GROUP BT ..." 이러한 에러를 마주 할 것입니다. 이 문제를 해결하기 위해선 sql_mode에서 "ONLY_FULL_GROUP_BY" 옵션을 삭제해주어야 합니다.
기존에는 sql_mode를 변경하기 위해선 /etc/mysql/my.cnf 을 vim 에디터로 실행 한 후 값을 바꾸고 재시작을 했어야 했습니다. 하지만 MySql 컨테이너 이미지를 이용하면 이러한 과정이 필요 없습니다.
$ docker run --name blaunchDB -e TZ=Asia/Seoul \
-v /root/mysql:/var/lib/mysql -d -p 3306:3306 \
mysql:8.0.27 --sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
이런식으로 컨테이너를 run 할 때 변수로 넣어줄 수 있습니다. 귀찮게 컨테이너에서 bash를 실행 할 필요도 없습니다. IaC 기반으로 인해서 서버 구축하기가 훨씬 더 편해진거 같습니다.
'...' 카테고리의 다른 글
[Java] 스프링을 왜 사용할까?(2) - OCP와 DIP 해결 By 순수 자바 (3) | 2022.02.01 |
---|---|
[Java] 스프링을 왜 사용할까?(1) - OCP와 DIP의 위배 (4) | 2022.01.20 |
[Linux] VM을 NFS로 사용하기 (0) | 2021.12.08 |
[K8S] 파일(.yaml)에서 문자열 검색 한 후 그 문자열의 라인 넘버 가져오기 (0) | 2021.11.26 |
[K8S]unable to fetch the kubeadm-config ConfigMap: failed to get config map: UnauthorizedTo see the stack trace of this error execute with --v=5 or higher 에러 (0) | 2021.11.23 |