레이블이 설정파일인 게시물을 표시합니다. 모든 게시물 표시
레이블이 설정파일인 게시물을 표시합니다. 모든 게시물 표시

2008년 12월 3일 수요일

설정파일 my.cnf(my.ini) -4

각 개발언어에서 my.cnf을 읽어들임
my.cnf파일의 해석의 제어, my.cnf파일의 group지정을 각 개발언어에서 어떻게 코딩하는지 간단하게 적어본다. 

1.C의 경우
  c에서는 mysql_options()함수를 사용해서 my.cnf파일을 읽어들인다. 
  • mysql_options(mysql, MYSQL_READ_DEFAULT_FILE, 파일명) :  my.cnf파일을 지정 (--defaults-file=하고 같이 지정한 파일만 읽어들임)
  • mysql_options(mysql, MYSQL_READ_DEFAULT_GROUP,  group명):읽어들일 group지정
2.Connector/ODBC (MyODBC)의 경우
 윈도우즈용의 ODBC는 DSN지정항목에 Read Options From my.cnf옵션이 존재한다. 
  이것을 체크해두면 my.ini을 읽어들이도록 동작한다.  읽어들여지는 group은 [odbc]이다.
 Unix계열 ODBC는 odbc.ini파일에 DSN정의를 적지만 그곳에 option=키워드를 지정하게되면 my.cnf을 읽어들이게 된다.  읽어들여지는 group은 [odbc]이다.

     odbc.ini예
     [DSN명]
     option= 65536

    option에 지정하는 값에 대해서는 아래의 매뉴얼을 참조할 것.
     ( Connecter/ODBC Connection Parameters : http://dev.mysql.com/doc/refman/5.1/en/myodbc-configuration-connection-parameters.html )

3.Connector/J의 경우
 Connector/J 3.1은 my.cnf파일을 읽어들이는 기능을 가지고 있지 않다. 

4.Perl DBD-mysql의 경우
 Perl DBD-mysql 3.003에서는 DSN정의에 다음의 키워드를 지정하는 것으로 my.cnf파일을 제어한다.
   
  •  mysql_read_default_file= : my.cnf파일을 지정 (--defaults-file=하고 같이 지정한 파일만 읽어들임)
  • mysql_read_default_group= : 읽어들일 group을 지정
5.PHP mysqli의 경우
PHP mysqli에서는 options()메소드를 사용해서 my.cnf 파일을 제어한다. 
  • $mysqli->options(MYSQLI_READ_DEFAULT_FILE, 파일명) : my.cnf파일을 지정 (--defaults-file=하고 같이 지정한 파일만 읽어들임)
  • $mysqli->options(MYSQLI_READ_DEFAULT_GROUP, group명): 읽어들일 group을 지정
6.PHP PDO MySQL의 경우
PDO MySQL의 경우에는 드라이버 옵션에서 my.cnf을 읽어들이도록 지시한다. 
$dbh = new PDO( DSN, 사용자명, 패스워드,
                   array(PDO::MYSQL_ATTR_READ_DEFAULT_FILE=>파일명,
                              PDO::MYSQL_ATTR_READ_DEFAULT_GROUP=>group명) );

7.Ruby(MySQL/Ruby)의 경우
 Ruby의 libmysqlclient 래퍼인터페이스 MySQL/Ruby 2.7.2(http://www.tmtm.org/mysql/ruby/)에서는 Mysql#options()메소드를 사용해서 my.cnf파일을 제어한다. 
  • Mysql#options(Mysql::READ_DEFAULT_FILE, 파일명):my.cnf파일을 지정 (--defaults-file=하고 같이 지정한 파일만 읽어들임)
  • Mysql#options(Mysql::READ_DEFAULT_GROUP, group명): 읽어들일 group지정


설정파일 my.cnf(my.ini) -3

각 명령어가 읽어들이는 group

MySQL 5.1.12-beta에서 제공되는 각 명령어(스크립트)가 사용하는 group을 소개한다. 
덧붙여「-」는 my.cnf설정을 읽어들이지 않는 다는 의미이다.

MySQL명령어군이 읽어들이는 group
1. charset2html   : -
2. comp_err : -
3. innochecksum : -
4. msql2mysql : -
5.my_print_defaults  : 지정된 group
6.myisam_ftdump : -
7.myisamchk : myisamchk
8.myisamlog : -
9.myisampack : myisampack
10.mysql : mysql, client
11.mysql_client_test : server, embedded, mysql_client_test_SERVER
12.mysql_client_test_embeded : server, embedded, mysql_client_test_SERVER
13.mysql_config: -
14.mysql_convert_table_format: -
15.mysql_create_system_tables: -
16.mysql_explain_log : -
17.mysql_find_rows : -
18.mysql_fix_extensions : -
19.mysql_fix_privilege_tables :  mysql_install_db, mysql_fix_privilege_tables
20.mysql_install_db: mysqld, mysql_install_db
21.mysql_secure_installation: mysql, client
22.mysql_setpermission : perl, client (다만 ~/.my.cnf파일만 읽어들임)
23.mysql_tzinfo_to_sql: -
24.mysql_upgrade: mysql_upgrade
25.mysql_waitpid : -
26.mysql_zap: -
27.mysqlaccess: -
28.mysqladmin : mysqladmin, client
29.mysqlbinlog : mysqlbinlog, client
30.mysqlsub : -
31.mysqlcheck: mysqlcheck, client
32.mysqld : mysqld, server, mysqld-5.1
33.mysqld_multi: mysqld
34.mysqld_safe: mysqld, server, mysqld_safe, safe_mysqld
35.mysqldump : mysqldump, client
36.mysqldumpslow: mysqld
37.mysqlhotcopy : mysqlhotcopy, client
38.mysqlimport : mysqlimport, client
39.mysqlmanager : manager( 다만 Unix계열에서는 /etc/my.cnf, 윈도우즈에서는 mysqlmanager.exe가 존재하는 디렉토리 \my.ini만 읽어들인다. )
40.mysqlshow : mysqlshow, client
41.mysqlslap : mysqlslap, client
42.mysqltest: mysqltest, client
43.mysqltest_embedded: mysqltest, client
44.ndb_config: mysql_cluster
45.ndb_cpcd : ndb_cpcd
46.ndb_delete_all : mysql_cluster
47.ndb_desc : mysql_cluster
48.ndb_drop_index : mysql_cluster
49.ndb_drop_table : mysql_cluster
50.ndb_error_reporter : mysql_cluster (ndb_config를 호출함)
51.ndb_mgm: mysql_cluster, ndb_mgm
52.ndb_mgmd: mysql_cluster, ndb_mgmd 
53.ndb_print_backup_file: -
54.ndb_print_schema_file: -
55.ndb_print_sys_file: -
56.ndb_restore : mysql_cluster, ndb_restor
57.ndb_select_all : mysql_cluster
58.ndb_select_count: mysql_cluster
59.ndb_show_tables: mysql_cluster
60.ndb_size.pl: -
61.ndb_test_platform : -
62.ndb_waiter: mysql_cluster
63.ndbd: mysql_cluster, ndbd
64.perror : -
65.replace: -
66.resolve_stack_dump: -
67.resolveip : resolveip, client


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 기술을 읽어들임

2008년 12월 1일 월요일

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

MySQL에서는 mysqld과 기타 명령어 옵션을 my.cnf또는 my.ini에 기술하는 것이 가능하다. 
(기술해놓지 않아도 명령어군은 동작한다.)  커맨드라인에서 매번 옵션을 지정하는 것은 귀찮지만 그 설정을 파일에 적어두면 일일이 옵션 지정할 필요가 없어진다. 

따라서 my.cnf에는 여러가지 기술을 하게 된다. 
Unix계열 OS에서는 보통 /etc/my.cnf이다.  윈도우즈에서는 c:\my.ini가 많이 사용된다. 

다만  위 기술장소 이외에 있는 파일도 읽어들일 수 있게 되어있다. 
여기에서는 my.cnf의 기술, 읽어들이는 순서, 읽어들여지는 그룹, 서포트하고 있는 옵션에 대해서 정리해본다. 

my.cnf읽는 순서
--default-file=옵션을 사용하고 있는 경우에는(만약 옵션이 이용가능하다면) 지정된 파일만 읽으므로 주의하길 바란다.  이것 이외에는 보통 여러개의 my.cnf파일을 읽어들인다. 
그 기능은 libmysqlclient(libmysql.dll)이 갖추고 있다. 

 여러개의 파일에 같은 옵션이 기술되어 있는 경우에는 나중에 읽어들인 값으로 대체된다. 
또 파일은 전부 존재하지 않으면 안된다. 

파일을 읽는 순서, 검색경로는 버전이 올라가면 변경될 가능성은 있다. 
다음은 각각의 my.cnf가 읽혀지는 순서이다. 

#Unix계열 운영체제 경우 읽는 순서(5.0/5.1)
1. /etc/my.cnf
2. /etc/mysql/my.cnf( 5.1.15-beta이상은 유효. 5.0.45에서는 읽어들이지 않음)
3. $MYSQL_HOME환경변수에 지정된 디렉토리/my.cnf 
4.--defaults-extra-file옵션에 지정된 파일
5.$HOME/.my.cnf(명령어를 실행하는 계정의 홈 디렉토리)
6.DEFAULT_SYSCONFDIR/my.cnf
 (DEFAULT_SYSCONFDIR은 ./configure --sysconfdir=에서 지정한 디렉토리 5.0.21이상)

#윈도우즈에서 읽는 순서(5.0/5.1)
 my.ini하고 my.cnf의 양 파일이 같은 디렉토리에 있는 경우에는 my.ini , my.cnf순으로 읽어들여진다. 
1.c:\my.{ini,cnf}
2.%WINDIR%\my.{ini,cnf}
3.%System%\my.{ini,cnf} (%System%은 kernel32.dll이 존재하는 디렉토리)
4.MYSQL_HOME환경변수에 지정된 디렉토리\my.{ini,cnf}
5.명령어가 존재하는 디렉토리의 한단계위의 디렉토리\my.{ini,cnf}
6.--defaults-extra-file=옵션에 지정된 파일
7.DEFAULT_SYSCONFDIR\my.{ini,cnf}
(DEFAULT_SYSCONFDIR은 컴파일할 때 "/D DEFAULT_SYSCONFDIR="처럼 지정된 디렉토리. 현재 바이너리 배포판은 무효. 5.0.21이상 )

버전 4.1에서는 $MYSQL_HOME환경변수는 읽어들이지 않는다.  그 대신에 datadir/my.cnf(datadir는 컴파일할 때 지정한 디렉토리)를 읽어들인다. 
5.0.21미만에서는 --sysconfdir(DEFAULT_SYSCONFDIR)에서 지정된 디렉토리에서는 찾지 않는다. 

libmysqlclient가 지원하는 옵션 
C언어로 작성된 libmysqlclient에는 my.cnf을 읽어들이는 기능이 있다. libmysqlclient는 my.cnf에 써져 있는 다음의 옵션을 지원한다. (sql-common/client.c에 기술)

compress  통신을 gzip압축한다.  zlib를 지원하면 사용가능
connect-timeout= 접속 타임아웃(초)
host= 호스트 지정
max-allowed-packet=  1개의 통신패킷의 최대 사이즈(바이트)
password= 접속할때의 패스워드
pipe 접속에  named pipe를 사용(윈도우즈만)
port= 서버의 포트
protocol=  [tcp|socket|pipe|memory]
secure-auth  4.1이상  클라이언트 인증에 한정
shared-memory-base-name=  shared memory이름
socket= 소켓파일명
user= 접속유저명
timeout=  connect-timeout과 동일
ssl-ca= CA의 CERTIFICATE 파일지정
ssl-capath= CA의 CERTIFICATE 파일이 존재하는 디렉토리 지정
ssl-cert=  CERTIFICATE파일지정
ssl-cipher= Cipher지정
ssl-key=  SSL키 파일의 지정

character-sets-dir=  charsets/디렉토리 지정
default-character-set=  character set이름 지정

database= 현재 데이터베이스 명
init-command= 서버에 접속후 자동적으로 실행하는 SQL문

disable-local-infile  LOCAL INFILE문 무효
local-infile  LOCAL INFILE 유효
interactive-timeout=  인터랙티브모드 타임아웃(초)
report-data-truncation  DataTruncation을 붙인다. 
report-found-rows  UPDATE실행할 때  mysql_info()가 변경한 레코드수가 아니라 발견한 레코드 수를 리턴하게 함.
multi-queries 클라이언트가  <;>로 연결된 복수의 SQL문을 한번에 보낼 수 있도록 함
multi-results  Result Set를 Multi로 클라이언트가 얻을 수 있도록 함
multi-statements multi-queries와 동일

enable-reads-from-master READ FROM MASTER를 유효로 한다. 
debug[=d:t:o,/tmp/client.trace] 디버그 모드 ./configure --with-debug로 유효화