2008년 12월 2일 화요일

설정파일 my.cnf(my.ini) 2

libmysqlclient가 읽어들이는 환경변수

libmysqlclient는 my.cnf이외에 환경변수에서 값을 읽어들일 수 있다. 
libmysqlclient는 다음과 같은 환경변수를 지원한다. (sql-common/client.c, libmysql/libmysql.c)

my.cnf하고 환경변수에서 같은 파라미터를 사용했을 경우는 my.cnf의 값을 채용한다. 
(my.cnf > 환경변수 > 표준치)

MYSQL_DEBUG 디버그모드. --debug=옵션에 해당
MYSQL_PWD 접속하기 필요한 패스워드 --password=옵션에 해당
USER --user=옵션이 생략되었을 경우, 이 값을 유저명으로 사용함

my.cnf의 내용기술

my.cnf(my.ini)파일은 다음의 룰에 따라서 기술한다.  덧붙여말하면 옵션명에 포함되는 "-"(마이너스)를 "_"(언더스코어)라고 해도 인식한다.  my.cnf안에는 옵션명에 포함되어 있는 "-"하고 "_"는 같은 값이다. 

 my.cnf기술 룰

#문자로 시작되는 행    코멘트행. 행의 도중에 있는 경우에는 #다음은 코멘트가 된다. 
;문자로 시작되는 행   코멘트행 
[group]  그룹명의 지정. 다음의 그룹 시작까지 하나의 그룹이 된다. 그룹내에 옵션을 기술할 것
opt_name 옵션. 명령어라인 인수에서는 --opt_name하고 같음. "--"을 빼고 기술할 것
opt_name=값  값을 지정하는 옵션
!include  추가로 읽어들일 파일을 지정   예> !include /etc/mysql/local_setting.cnf
!includedir 지정된 디렉토리 이하의 파일을 추가 설정파일로 읽어들임  예>!includedir /etc/mysql/conf.d 
      
 
[client] group
my.cnf의 [client] group에 기술되는 옵션은 my.cnf을 사용하는 많은 어플리케이션, 명령어에 사용된다. (전부는 아니다!)  예를 들면 mysql명령어는 [client] group과 [mysql] group을 사용한다. 

[client]하고 [mysql] group의 내용은 my.cnf파일내에 기술된 순서로 읽어들여진다. 
어느 group이 먼저 읽어들여지는가 결정되어있지 않고 그냥 적혀진 순서대로 따른다. 
(mysys/default.c)
주의점은 아래에 있다. 
1.[client] group은 모든 명령어, 어플리케이션이 사용하지는 않는다. 
2.모든 명령어, 어플리케이션이 지원하지 않는 옵션을 적으면 에러로 정지하는 명령어가 생길 수 있다. 

PHP-mysqli, MySQL/Ruby, Perl DBD-mysql, MyODBC(Connector/ODBC)는 libmysqlclient(libmysql.dll)을 사용하고 있지만 my.cnf파일을 읽어들이는 코딩 또는 설정을 하지 않는 한 my.cnf을 읽어들이지 않는다. 

my.cnf을 읽어들이지 않는다는 것은 [client] group에 옵션을 적어두어도 먹히지 않는다. 
또 명령어중에는 my.cnf는 읽어들이지만 [client] group을 읽지않는 것도 존재한다. 

또 Connector/J는 my.cnf을 읽어들이지 않는다. 

my.cnf를 다루는 옵션
libmysqlclient를 사용한 명령어와 mysqld(MySQL서버)는 다음의 옵션을 지원한다. 
이것은 my.cnf 취득을 제어하는 옵션이다. 



my.cnf취득 제어 옵션


--no-defaults
my.cnf 파일을 읽어들이지 않음

--print-defaults
설정된 옵션을 표시

--defaults-file=
설정된 파일만 my.cnf옵션파일로써 읽어들임

--defaults-extra-file=
지정된 파일을 추가로 읽어들임

--defaults-group-suffix=
지정된 suffix을 붙인 group을 읽어들임. 예를 들면 mysq --defaults-group-suffix=_my라고 하면 mysql명령어는 [client_my], [mysql_my] group 기술을 읽어들임