삽질하는플머

Synology NAS의 MySQL 테이블 대소문자 구분 설정

이런저런잡다구리/Synology-nas

윈도의 MySQL 에서 작성한 DB 스키마를 Synology NAS 의 MySQL로 옮겨 테스트 하자마자 쏟아지는 에러. 

CREATE TABLE 또는 CREATE DATABASE 에서 대소문자를 예쁘게 구분해봐야 저장될 때는 소문자로 저장되는게 어찌 희안하더라니... 

윈도의  MySQL 에서는 SQL문 내의 테이블과 데이터베이스에서 대소문자를 구분하지 않지만, NAS의 리눅스에서는 구분하고 있다. 

일단 SQL문을 뜯어고쳐 대소문자를 맞춰주기는 했는데... 덕분에 아무래도 유기농 코드가 잔뜩 만들어진 듯...  (벌레 벌레~)

윈도와 리눅스의 MySQL 설정이 달라서 애를 먹은 게 한두번이 아니었지만... 그래도 이건 좀 아니잖아. 

이 설정을 동일하게 맞추는 방법이 없을까 하고 뒤져보니  lower_case_table_names 를 살펴보란다. 


http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html



이 변수의 기본값이 윈도와 맥에서는 1로, 리눅스에서는 0으로 설정된다고 한다. 각 값의 의미는 다음과 같다. 


의미
0테이블과 데이터베이스 이름들은 CREATE TABLE 또는 DATABASE 문에 정의된 문자로 디스크에 저장되며 이름 비교시 대소문자를 구분한다.
1테이블과 데이터베이스 이름들은 소문자로 저장되고 이름 비교시 대소문자를 구분하지 않는다.
2테이블과 데이터베이스 이름들은 CREATE TABLE 또는 DATABASE 문에 정의된 문자로 디스크에 저장되며 이름 비교시 대소문자를 구분하지 않는다.


가성비가 떨어지는데도 불구하고 Synology NAS를 좋아하는 건, SSH 연결을 지원하기 때문이지.
부트스트랩을 통해 이런저런 도구들도 마음대로 설치할 수 있고...

http://lycons.iptime.org/tc/49


요새는 QNAP 것도 끌리는데... 어디 출장 나가는 사람 없나... 가격 차이가 이건 뭐 두배나 나니...


아무튼 SSH로 접속한 다음 my.cnf 를 찾아보자. 응? 그렇게 생긴 파일이 하나도 없네??

my*.cnf 로 검색해보니 다섯개의 파일이 튀어나온다. 


# find / -name my*.cnf

/usr/syno/mysql/share/mysql/my-huge.cnf

/usr/syno/mysql/share/mysql/my-small.cnf

/usr/syno/mysql/share/mysql/my-innodb-heavy-4G.cnf

/usr/syno/mysql/share/mysql/my-large.cnf

/usr/syno/mysql/share/mysql/my-medium.cnf



현재 사용중인 물건은 메모리 128M짜리 DS-110j



my-medium.cnf 을 설정파일로 사용하면 되겠군. 이 파일을 /ect/my.cnf 로 복사한다. 


# cp /usr/syno/mysql/share/mysql/my-medium.cnf /etc/my.cnf



my.cnf 파일을 열고 [mysqld] 항목 아래에 다음 설정을 추가. 


lower_case_table_names = 1



NAS의 mysql 데몬 재구동은 다음과 같이. 


/usr/syno/etc/rc.d/S21mysql.sh restart



제대로 설정되었는지 확인하려면 아래 SQL을 실행. 


SHOW VARIABLES LIKE  'lower_case_table_names'


Variable_nameValue
lower_case_table_names1


우분투의 경우도 요령은 동일하다.