티스토리 뷰

 

도커 허브에 올라온 공식 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 기반으로 인해서 서버 구축하기가 훨씬 더 편해진거 같습니다.

댓글
댓글쓰기 폼
공지사항
Total
248,427
Today
802
Yesterday
1,065
링크
«   2022/10   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
글 보관함