Database/MySQL

docker mysql lower_case_table_names

catchv 2021. 8. 23. 23:27

WSL2 docker로 mysql을 올려서 clone 테스트 중 문제가 발생하여 정리합니다.

 

WSL2 docker로 mysql을 사용하며 data directory를 volume으로 연결하여 사용하였는데

 

mysql을 local clone 하고 해당 clone data directory(volume 설정 안함)로 mysql을 시작하였는데 다음과 같은 메세지와 함께 에러가 발생하였습니다.

 

[ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('0') and data dictionary ('2').
[ERROR] [MY-010020] [Server] Data Dictionary initialization failed.

에러 번호는 [MY-011087] 이며 해당 내용을 보면 lower_case_table_names 설정이 서버는 0으로 되어 있는데

data dictionary는 2로 되어 있다는 것입니다.

 

mysql의 lower_case_table_names 기본값은 linux : 0, windows : 1, mac : 2로 설정된다고 되어 있습니다.

해당 설정값은 my.cnf나 cmd-option으로만 설정 가능한 readonly 값입니다.

메뉴얼 설명은

0으로 설정하면 테이블 이름이 지정된 대로 저장되고 비교는 대소문자를 구분합니다.

1로 설정하면 테이블 이름은 디스크에 소문자로 저장되고 비교는 대소문자를 구분하지 않습니다.

2로 설정하면 테이블 이름은 주어진 대로 저장되지만 소문자로 비교됩니다." 로 되어 있습니다.

가능한 값을 정리하면

windows : 1, 2 가능(윈도우는 대소문자 비교 하지 않음.)

linux : 0, 1 가능(linux는 2로 설정하면 0으로 변경됨.)

mac : mac이 없어서 모르겠음.

 

그러나 windows(WSL2) docker로 mysql을 설치하고 volume(datadir)을 마운트하면 lower_case_table_names가 기본 2로 설정됩니다.

해당 값은 초기 설치시 설정이 계속 유지되며 중간에 값을 바꾸는 것은 불가능합니다.

 

docker linux mount list에 보면 아래와 같은 마운트가 보입니다.

C:\134 /var/lib/mysql 9p rw,dirsync,noatime,aname=drvfs;path=C:\;uid=0;gid=0;metadata;symlinkroot=/mnt/host,mmap,access=client,msize=65536,trans=fd,rfd=8,wfd=8 0 0

 

docker에 다른 옵션이 있지는 않아 보입니다.(찾으면 수정하겠습니다.)

 

WSL2 docker에서 설치시 volume 디렉토리 사용하여 lower_case_table_names을  0으로 설정하면 file system unsupported라고 나오면 서버는 중지됩니다.

[ERROR] [MY-010158] [Server] The server option 'lower_case_table_names' is configured to use case sensitive table names but the data directory is on a case-insensitive file system which is an unsupported combination. Please consider either using a case sensitive file system for your data directory or switching to a case-insensitive table name mode.
[ERROR] [MY-010119] [Server] Aborting

이게 replication, backup(xtrabakcup) 등에서도 문제가 발생될 것으로 보입니다.

 

만약 lower_case_table_names 을 변경해야 한다면 mysqldump로 백업 후 다시 생성하는 방법 이외에는 변경 방법이 없습니다.

 

운영 시스템은 대부분 linux 환경이므로 0으로 설정하여 운영하면 문제가 없지만 다른 OS나 다른 설정이 된 서버와의 데이터 운영시에는 문제가 될 것으로 보입니다.

'Database > MySQL' 카테고리의 다른 글

docker mysql lower_case_table_names  (0) 2021.08.23
mysql 8.x error message  (0) 2021.08.15
mysql 8.x root password 초기화  (0) 2021.08.15
MySQL root 접근 권한 설정  (0) 2014.05.26
MySQL Linux Port 방화벽 설정(3306)  (1) 2014.05.26
yum을 이용한 MySQL 설치  (0) 2014.05.26