---
tags: docker, lower_case_table_names, 대소문자, docker, mysql
---
docker Mysql my.cnf 변경 하기
===
나만의 격리된 테스트 환경을 만들기 위해 docker Mysql 을 설치하여 진행하고자 하는데, docker는 Unix 계열 이므로 대소문자를 구분하게 된다.
반면 기존 개발환경 에서는 windows를 위해 대소문자를 구분을 하지 않게끔 설정 변경하여 사용중이었고, 통일하고자 이러한 설정을 찾게 되었다.
여담으로 api uri 를 지을때도 카멜케이스 대신 대시로 구분 하는것을 권한다.
> - /user/whiteList (x)
> - /user/white-list (o)
카멜케이스를 제외하고는 대소문자 구분을 적극적으로 활용하지 않는게 대세인가?
## 대소문자 구분 끄기 my.cnf
Mysql 의 대소문자 구분을 무시하려면 my.cnf 에서 lower_case_table_names=1 로 설정을 바꿔줘야 한다.
기본값은 0이다.
vi로 편집후 재기동 하는 방법과 run 시점에 옵션을 추가하는 방법 2가지가 있다. 각각의 방법을 알아보자.
### vi 로 편집후 mysqld 재기동 (비추천)
vi 가 필요는 없지만 학습목적을 위해 설치한다.
- apt-get update
- apt-get install vim
설치를 했으면 직접 vi로 my.cnf를 들여다 보자.
- vi /etc/mysql/my.cnf
`lower_case_table_names=1` 설정이 되어있어야 대소문자를 구분하지 않는다. 기본값은 0이다.
> lower_case_table_names
설정 역시 설명한 블로그가 많으니 자세한 설명은 패스.
오피셜을 설치했다면 `lower_case_table_names=1` 설정은 당연히 없을것이다. 여기에 추가를 하고 재기동을 해도 되겠지만 좋은방법같진 않다. (실제로 몇번 시도해봤는데 잘 안되더라.)
### run 시점에 옵션으로 설정 추가 (추천)
run 옵션으로 추가할수 있다.
이것도 공식문서를 참고했다.
> [docker hub](https://hub.docker.com/_/mysql) 에서, `Configuration without a cnf file` 부분 참고
명령어는 다음과 같다.
- docker run `--name mysql-test` `-p 3306:3306` `-e MYSQL_ROOT_PASSWORD=1` `-d mysql` `--lower_case_table_names=1`
위 명령어를 쓰면 되는데, 정리를 위해 순서대로 알아 보자.
1. `--name mysql-test`
컨테이너 이름을 지정 한다.
2. `-p 3306:3306`
port 의 약자.
외부포트:내부포트 로 지정할수 포트번호를 직접 지정할수 있다.
4. `-e MYSQL_ROOT_PASSWORD=1`
enviroment 의 약자.
MYSQL_ROOT 의 초기 패스워드를 지정 했다.
5. `-d mysql`
detach 의 약자.
mysql 이미지 실행시 detach 모드로 실행 한다.
포어그라운드 모드의 반대인데, -d가 기본값 이라고 한다.
> 굳이 안써도 되는가보다. 아직 테스트해보진 못했다.
6. `--lower_case_table_names=1`
my.cnf 에 입력할수 있는 설정들을 `-d mysql` 설정 뒤에 넣으면 추가되어 실행된다.
> `--lower_case_table_names=1` 의 **위치가 중요하다. `-d mysql` 뒤에 입력 되어야 한다.**
mysql 에서 잘 적용되었는지 확인하자.
```
use mysql;
show variables like 'lower_case_table_names';
```
> --lower_case_table_names=1 확인