DBMS 2
DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!
MySQL프로그램용 옵션을 지정하는 데에는 몇 가지 방법이 있다: 어떤 변수들이 지정 되었는지 확인 하기 위해서, MySQL 프로그램은 우선 환경 변수를 검사한 후에, 옵션 파일들을 읽고, 마지막으로 명령어 라인을 검사한다. 하나의 옵션이 여러 번 지정되어 있다면, 마지막에 나오는 것이 우선권을 갖게 된다. 이것은 환경 변수가 가장 낮은 순위를 갖고 명령어 라인이 가장 높은 우선권을 갖는다는 것을 의미하는 것이다. 여러분은 옵션 파일에 있는 프로그램 옵션에 대해 디폴트 값을 지정해서 프로그램들이 이것을 사용하도록 활용할 수 있다. 이렇게 하면 프로그램을 실행시킬 때마다 일일이 입력을 하는 수고를 피할 수 있을 뿐만 아니라, 필요하다면 명령어 라인에서 다른 옵션을 지정해 줌으로서 디폴트 값을 무시하도록 만들 수도 있다. 명령어 라인에서 지정되는 옵션들은 아래의 규칙을 따른다: 어떤 옵션들은 결과를 활성화 또는 비활성화 (turn on 또는 off)시키는 기능을 제어하기도 한다. 예를 들면, mysql 클라이언트는 --column-names 옵션을 지원하는데, 이 옵션은 쿼리 결과를 보여줄 때 컬럼 이름 열을 화면에 보여줄 지 또는 숨길지를 결정한다. 이 옵션의 디폴트 값은 보여주는 것이다. 하지만, 여러분은 이 기능을 어떤 상황에서는 숨길 수도 있는데, 예를 들면 mysql의 결과를 다른 프로그램에 보내서 초기 헤더 라인을 뺀 데이터 부분만을 보고자 할 경우가 여기에 해당한다. 컬럼 이름을 비활성화 시키기 위해서는, 아래 형태 중에 하나를 가지고 옵션을 지정하면 된다: --disable 과 --skip 접두사 및 =0 접미사는 모두 동일한 효과를 나타낸다: 이것들은 옵션을 비활성화 시킨다. 다음과 같이 지정을 하면 옵션을 “enabled” 하게 만들 수가 있다: 만약에 옵션이 -loose 다음에 나오는 경우에는, 프로그램이 그 옵션을 인식하지 못함으로 인해 에러가 발생하고 종료되지 않는 대신에 경고 메시지만을 보여주게 된다: --loose 접두사는 동일 머신에 다중의 MySQL을 설치한 장비에서 프로그램을 구동시키고 옵션 파일에 옵션을 기술해 놓을 때 유용하게 사용할 수 있는 것이다. 한 프로그램의 모든 버전에서 인식되지 않는 옵션에 대해서는 --loose 접두사를 사용해서 지정할 수가 있다 (또는 옵션 파일에서 loose 를 사용한다). 이 옵션을 인식하는 프로그램 버전은 정상적으로 프로세스를 진행하고, 이것을 인식하지 못하는 버전은 경고 메시지를 보낸 다음에 무시해 버리게 된다. 때때로 mysql과 함께 유용하게 사용할 수 있는 옵션이 --execute 또는 -e 옵션인데, 이것은 SQL명령문을 서버에 패스할 때 사용된다. 이러한 명령문들은 단일 또는 이중 인용 부호로 묶여야 한다. 명령문 안에서 인용 부호를 사용하고자 한다면, 명령문에 대해서는 이중 인용 부호를 사용하고, 명령문 내에서는 단일 인용 부호를 사용한다. 이 옵션을 사용하면, mysql은 그 명령문을 사용한 다음에 종료를 한다. 예를 들면, 여러분은 아래의 명령어를 가지고 사용자 계정의 리스트를 얻을 수 있을 것이다 전체 이름 형태 (--execute)는 등호 기호(=)가 뒤 따라 와야 한다는 점을 기억하기 바란다. 앞의 예제에서 보았듯이, mysql 데이터 베이스의 이름은 별도의 인수 형태로 전달 되었다. 하지만, 동일한 명령문을 아래의 명령어로 실행시킬 수 있는데, 여기에서는 디폴트 데이터 베이스를 지정하지 않았다: 다중 SQL 명령문은 명령어 라인에서 세미콜론으로 구분해서 전달 될 수도 있다: --execute 또는 -e 옵션은 MySQL 클러스터에 대한 ndb_mgm 관리 클라이언트에 비슷한 형식으로 명령문을 전달할 때 사용되기도 한다. 대부분의 MySQL 프로그램들은 옵션 파일 (때로는 구성 파일로도 불리어짐)에서 스타트업 옵션을 읽을 수 있다. 옵션 파일들은 주로 사용되는 옵션들을 지정하는데 대해서 편리한 방법을 제공해 주기 때문에 여러분이 명령어 라인에서 프로그램을 구동할 때마다 입력하는 수고를 없애 준다. 프로그램이 옵션 파일을 읽을 수 있는지 없는지를 확인하기 위해서는, --help 옵션 (mysqld의 경우, --verbose 및 --help for mysqld)을 함께 사용해서 프로그램을 호출한다. 만약에 프로그램이 옵션 파일을 읽을 수 있다면, 도움말 메시지는 프로그램이 찾는 파일과 인식할 수 있는 옵션 그룹을 표시하게 된다. Note: MySQL 클러스터 프로그램과 함께 사용되는 옵션 파일들은 Section 15.4, “MySQL 클러스터 구성”에서 설명하기로 한다. 윈도우 시스템의 경우, MySQL 프로그램은 아래의 파일들에서 스타트업 옵션들을 읽는다: WINDIR 는 윈도우 디렉토리 위치를 나타낸다. 이것은 주로 C:\WINDOWS 또는 C:\WINNT가 된다. 여러분은 이것의 정확한 위치를 아래의 명령문을 사용해서 WINDIR 환경 변수의 값을 가지고 알아낼 수가 있다: INSTALLDIR 는 MySQL이 설치된 디렉토리를 가리킨다. 일반적으로는 C:\PROGRAMDIR\MySQL\MySQL 5.0 Server 가 되며, MySQL 5.0을 설치 및 구성 마법사를 사용해서 설치할 때에는, PROGRAMDIR 은 프로그램 디렉토리를 가리키게 된다 (일반적으로 영문 윈도우 버전의 경우에는 Program Files). 유닉스 시스템의 경우, MySQL 프로그램은 아래의 파일들에서 스타트업 옵션을 읽는다: MYSQL_HOME은 서버 관련 my.cnf 파일이 상주하고 있는 디렉토리 경로를 갖고 있는 환경 변수이다. 만약에 MYSQL_HOME 이 설정되지 않고 mysqld_safe를 사용해서 서버를 구동시킨다면, mysqld_safe은 MYSQL_HOME을 아래와 같이 설정하고자 할 것이다: 전형적으로 본다면, 바이너리를 설치할 경우의 DATADIR 은 /usr/local/mysql/data 가 되고 소스를 설치할 경우에는 /usr/local/var 가 된다. 이곳이 MySQL을 구성할 때 지정되는 데이터 디렉토리의 위치이며, mysqld 를 구동할 때 -datadir 옵션을 가지고 지정하는 위치가 아니라는 것을 알아두기 바란다. 런타임시 -datadir을 사용하더라도 서버가 옵션 파일을 어디에서 찾을 것인지에 대해서는 아무런 영향을 주지 않는데, 서버는 어떤 옵션을 실행하기 전에 옵션 파일들을 찾기 때문이다. MySQL은 위에서 언급한 순서대로 옵션 파일들을 찾고 읽게 된다. 여러분이 사용하고자 하는 옵션 파일이 존재하지 않는다면, 일반적인 텍스트 편집기를 사용해서 이것을 생성한다. 주어진 옵션에서 다중의 인스턴스가 발견되면, 최종 인스턴스가 우선 순위를 갖게 된다. 한 가지 예외가 있다: mysqld에 대해서는, --user 옵션의 첫 번째 인스턴스는 보안 목적으로 사용되기 때문에, 옵션 파일에 있는 사용자 지정 옵션을 명령어 라인에서 지정하는 것이 앞서 실행되지 않도록 하고 있다. MySQL프로그램을 구동할 때 명령어 라인에서 입력할 수 있는 옵션들은 어떤 것이든지 옵션 파일에서도 사용할 수 있다. 한 프로그램에서 사용 가능한 옵션들의 목록을 보기 위해서는, 그 프로그램을 --help 옵션과 함께 구동 시킨다. 옵션 파일에서 옵션을 지정할 때 사용하는 신텍스는 명령어 라인에서 사용하는 신텍스와 유사하지만, 옵션 앞에 사용하는 두 개의 대시는 생략해야 한다. 예를 들면, 명령어 라인에서 사용되는 --quick 또는 --host=localhost는 옵션 파일에서는 quick 또는 host=localhost 과 같이 쓰여져야 한다. --loose-opt_name 을 옵션 파일에서 지정하기 위해서는, loose-opt_name와 같이 작성되어야 한다. 옵션 파일에서는 비어 있는 라인 (Empty lines)이 무시된다. 라인이 비어 있지 않다면 아래의 형태 중에 하나가 될 것이다: 숫자 값을 갖는 옵션의 경우에는, 그 값에 접미사 K, M, 또는 G (대소문자 모두 사용 가능)을 사용해서 1024, 10242 또는 10243의 승수를 표시할 수 있다. 예를 들면, 아래의 명령어는 mysqladmin에게 서버를 1024번만큼 PING하도록 하는데, 각 PING간에는 10초의 간격을 두라고 명령하는 것이다: mysql> mysqladmin --count=1K --sleep=10 ping 앞뒤에 있는 공백 (blank)은 옵션 이름과 값에서 자동으로 삭제된다. 여러분은 이스케이프 시퀀스 (escape sequences)를 사용할 수도 있는데, 옵션 파일에서 ‘\b’, ‘\t’, ‘\n’, ‘\r’, ‘\\’, 와 ‘\s’를 사용해서 백스페이스 (backspace), 탭 (tab), 뉴라인 (newline), 캐리지 리턴 (carriage return), 그리고 스페이스 문자를 의미하도록 할 수 있다. ‘\\’ 이스케이프 시퀀스는 단일 백슬레시를 의미하기 때문에, 여러분은 각각의 ‘\’를 ‘\\’로 써야 한다. 다른 방법으로는, 경로 이름 구분자 (separator)로 ‘\’를 사용하지 않고 ‘/’를 사용할 수도 있다. 옵션 그룹의 이름이 프로그램 이름과 같다면, 그룹에 있는 옵션들은 특별히 그 프로그램에 적용되게 된다. 예를 들면, [mysqld] 와 [mysql] 그룹은 mysqld 서버와 mysql 클라이언트 프로그램에 각각 적용된다. 모든 클라이언트 프로그램은 [client] 옵션 그룹을 읽을 수 있다 (mysqld는 읽을 수 없음). 이것은 여러분이 모든 클라이언트에 적용되는 옵션을 지정할 수 있게 해 준다. 예를 들면, [client]는 여러분이 서버에 접속할 때 사용하기 위한 패스워드를 지정할 때 사용할 수 있는 완벽한 그룹이다. (하지만 그 옵션 파일이 여러분만 읽고 쓸 수 있도록 해야 하며, 다른 사람들이 패스워드를 알지 못하도록 해야 한다.) 여러분이 사용하는 모든 클라이언트 프로그램이 인식하지 못하는 옵션은 [client] 그룹에 그 옵션을 넣지 않도록 한다. 여러분이 프로그램을 구동시키고자 한다면, 프로그램은 이 옵션을 인식하지 못하게 되고 에러 메시지를 보여 주면서 동작을 멈추게 된다. 아래에 있는 것은 전형적인 글로벌 옵션 파일이다: 앞의 옵션 파일은 key_buffer_size 와 max_allowed_packet 변수를 설정하는 라인을 위해 var_name=value 신텍스를 사용하고 있다. 다음에 나오는 것은 전형적인 사용자 옵션 파일이다: 특정 MySQL릴리즈 시리즈에 속한 mysqld 서버만 읽을 수 있는 옵션 그룹을 생성하고자 한다면, [mysqld-4.1], [mysqld-5.0]과 같은 이름을 가진 그룹을 사용해서 만들면 된다. 아래의 그룹은 --new 옵션이 5.0.x 버전 번호를 가진 MySQL 서버에 의해서만 사용되도록 지시한다: MySQL 5.0.4 이후에는, 옵션 파일에서 !include 지시문 (directives)을 사용해서 다른 옵션 파일을 포함하도록 만들 수가 있고 !includedir를 사용해서 옵션 파일에 대한 특정 디렉토리를 검색하도록 할 수가 있다. 예를 들면, /home/mydir/myopt.cnf 파일을 포함하기 위해서는, 여러분은 아래의 지시문을 사용할 수 있다: /home/mydir 디렉토리를 검색하고 그곳에서 찾은 옵션 파일들을 읽기 위해서는, 아래의 지시문을 사용한다: Note: 현재의 버전까지는, 유닉스 시스템에서 !includedir 지시문을 사용해서 검색되고 포함 되는 파일들은 반드시 파일 이름 끝에 .cnf가 있어야 한다. 윈도우에서는, 이러한 지시문은 .ini 또는 .cnf 확장자로 끝나는 파일을 검사한다. 포함되어 있는 옵션 파일의 컨텐츠는 현재 (current) 옵션 그룹의 문장에서 적용된다는 점을 알아두기 바란다. 여러분이 아래의 라인을 my.cnf 안에 써 놓았다고 가정하자: 이 경우에, myopt.cnf 파일은 서버에 의해서만 실행되면, !include 지시문은 다른 클라이언트 어플리케이션에 의해 무시된다. 하지만, 만약에 아래의 라인을 사용하게 된다면, 디렉토리 /home/mydir/my-dump-options 은 mysqldump만이 옵션 파일로 검사를 하게 되고, 서버 또는 다른 어떤 클라이언트 어플리케이션들은 이것을 검사할 수 없게 된다: 여러분이 소스 배포판을 갖고 있다면, support-files 디렉토리에서 my-xxxx.cnf라는 이름의 샘플 옵션 파일들을 찾을 수 있을 것이다. 바이너리 배포판을 가지고 있다면, MySQL이 설치된 디렉토리 아래에 있는 support-files 디렉토리를 검사해 본다. 윈도우 시스템의 경우에는, 샘플 옵션 파일들이 MySQL 설치 디렉토리 안에 있을 것이다 (어디에 있는 지 모를 경우에는, 이 섹션 초기 부분 또는 Chapter 2, MySQL 설치 및 업그레이드 를 보기 바란다). 현재의 버전까지는, 소형, 중간, 대형, 및 초 대형 시스템에 대해서 모두 동일한 샘플 옵션을 제공하고 있다. 이 파일들 중에 하나를 시험하기 위해서는, 윈도우에서는 그것을 C:\my.cnf에 복사하고, 유닉스에서는 홈 디렉토리에 있는 .my.cnf에 복사를 한다. Note: 윈도우에서는, .cnf 옵션 파일 확장자가 보이지 않을 수도 있다. 옵션 파일들을 지원하는 대부분의 MySQL 프로그램들은 다음의 옵션들을 처리한다. 이것들은 옵션 파일을 다루는데 영향을 끼치기 때문에, 옵션 파일에서 사용하지 말고 명령어 라인에서만 사용을 해야 한다. 올바르게 동작 시키기 위해서는, 각각의 옵션을 명령어 다음에 바로 입력해야 하는데, 한 가지 예외적인 경우는, --print-defaults는 --defaults-file 또는 --defaults-extra-file 바로 다음에 사용될 수 있다. MySQL에 대한 다른 프로그램 언어 인터페이스는 C 클라이언트 라이브러리에 근거를 하고 있으며, 이러한 인터페이스 중에 어떤 것들은 옵션 파일의 컨텐츠에 접근할 수 있는 방법을 제공해 주기도 한다. 여기에는 Perl 과 Python이 포함된다. 자세한 내용에 대해서는, 여러분이 선호하는 인터페이스 매뉴얼을 참조하기 바란다. 환경 변수를 사용해서 옵션을 지정하기 위해서는, 여러분이 사용하는 명령어 프로세서에 적당한 신텍스를 사용해서 변수를 설정한다. 예를 들면, 윈도우 또는 NetWare에서는, USER 변수를 설정해서 MySQL 계정 이름을 지정하도록 한다. 이렇게 하기 위해서, 아래의 신텍스를 사용한다: 유닉스용 신텍스는 여러분이 사용하는 쉘과 관련이 된다. 여러분이 TCP/IP 포트 번호를 MYSQL_TCP_PORT 변수를 사용해서 지정하고자 한다고 가정한다. 이에 대한 전형적인 신텍스는 (sh, bash, zsh의 경우) 다음과 같다: 첫 번째 명령어는 변수를 설정하고, export 명령어는 그 변수를 쉘 환경 변수로 보내서 그 값을 MySQL과 다른 프로세스들이 사용할 수 있도록 만든다. csh 와 tcsh의 경우에는, setenv를 사용해서 쉘 변수를 환경에 맞게 만든다: 환경 변수를 설정하는 명령어는 명령어 라인에서 실행 시켜서 즉시 효과를 나타내도록 할 수는 있으나, 설정은 여러분이 로그 아웃을 하지 않은 상태에서만 유지가 된다. 여러분이 로그인 할 때마다 효과를 갖기 위해서는, 적당한 명령어 또는 명령어들을 스타트업 파일에 적어 놓아서 명령어 인터프리터가 매 서버 시작 때마다 읽을 수 있도록 하면 된다. 전형적인 스타트업 파일들은, 윈도우에서는 AUTOEXEC.BAT 이며, bash에서는 .bash_profile, 그리고 tcsh에서는 .tcshrc 가 된다. 보다 상세한 사항은 명령어 인터프리터 매뉴얼을 참조하기 바란다. 많은 MySQL 프로그램들이 런타임 때 설정할 수 있는 내부 변수들을 가지고 있다. 프로그램 변수들은 전체 이름 옵션에 값을 설정하는 것과 같은 방식으로 설정된다. 예를 들면, mysql은 max_allowed_packet 이라는 변수를 가지고 있는데, 이 변수는 통신 버퍼의 최대 크기를 제어한다. max_allowed_packet 변수를 16MB로 설정하기 위해서는, 아래의 명령어 중에 하나를 사용한다: 첫 번째 명령어는 값을 바이트로 지정한다. 두 번째 명령어는 메가 바이트로 지정한다. 숫자 값을 가지는 변수에 대해서는, 접미사 K, M, 또는 G (대소 문자 상관 없음)를 사용해서 1024, 10242 또는 10243 승수를 표시할 수 있다. 옵션 파일에서, 변수 설정은 대시를 앞에lowed_packet=16777216 또는: [mysql] max_allowed_packet=16M 아래의 옵션 그룹들은 모두 동일한 것들이다. 양쪽 모두 서버의 키 버퍼를 512MB로 설정한다: Note: MySQL 4.0.2 이전에는, 프로그램 변수를 설정할 수 있는 유일한 신텍스가 --set-variable=option=value (또는 옵션 파일에서는, set-variable=option=value) 밖에 없었다. 이 신텍스는 여전히 사용 가능하지만, 4.0.2 이후에는 그다지 사용되지 않는다.프로그램 옵션 지정하기
프로그램 옵션 지정하기
명령어 라인에서 옵션 사용하기
옵션 파일 사용하기
환경 변수를 사용해서 옵션 지정하기
옵션을 사용해서 프로그램 변수 설정하기
명령어 라인에서 옵션 사용하기
shell> mysql -ptest
shell> mysql -p test
첫 번째 명령어는 mysql이 test를 패스워드 값으로 사용하도록 지시하지만, 디폴트 데이터 베이스를 지정하지는 않게 된다. 두 번째 명령어는 mysql이 패스워드용 프롬프트를 내 보내고 test를 디폴트 데이터 베이스로 사용하도록 지시하는 것이다.
--disable-column-names
--skip-column-names
--column-names=0
--column-names
--enable-column-names
--column-names=1
shell> mysql --loose-no-such-option
mysql: WARNING: unknown option '--no-such-option'
shell> mysql -u root -p --execute="SELECT User, Host FROM user" mysql
Enter password: ******
+------+-----------+
| User | Host |
+------+-----------+
| | gigan |
| root | gigan |
| | localhost |
| jon | localhost |
| root | localhost |
+------+-----------+
shell>
mysql> mysql -u root -p --execute="SELECT User, Host FROM mysql.user"
shell> mysql -u root -p -e "SELECT VERSION();SELECT NOW()"
Enter password: ******
+------------+
| VERSION() |
+------------+
| 5.0.19-log |
+------------+
+---------------------+
| NOW() |
+---------------------+
| 2006-01-05 21:19:04 |
+---------------------+
옵션 파일 사용하기
Filename
Purpose
WINDIR\my.ini
Global options
C:\my.cnf
Global options
INSTALLDIR\my.ini
Global Options
defaults-extra-file
The file specified with --defaults-extra-file=path, if any
C:\> echo %WINDIR%
Filename
Purpose
/etc/my.cnf
Global options
$MYSQL_HOME/my.cnf
Server-specific options
defaults-extra-file
The file specified with --defaults-extra-file=path, if any
~/.my.cnf
User-specific options
코멘트 라인은 ‘#’ 또는 ‘;’로 시작한다. ‘#’로 시작 되는 코멘트는 라인의 중간에서도 시작할 수 있다.
group은 여러분이 옵션을 설정하고자 하는 그룹 또는 프로그램의 이름이다. 그룹 라인 다음에 다른 그룹 라인이 주어지거나 옵션 파일의 끝이 나오기 전까지는 어떠한 옵션 설정 라인도 주어진 그룹에 적용할 수 있다.
이것은 명령어 라인에서의 --opt_name 과 동일한 것이다.
이것은 명령어 라인의 --opt_name=value 과 동일한 것이다. 옵션 파일에서는, ‘=’ 기호 앞뒤에 스페이스를 사용할 수 있지만, 명령어 라인에서는 이렇게 사용할 수 없다. 여러분은 단일 또는 이중 인용 부호로 값을 묶을 수도 있는데, 그 값이 ‘#’ 코멘트 문자 또는 화이트 스페이스 (whitespace)를 갖고 있을 경우에 유용하게 사용할 수 있다.
[client]
port=3306
socket=/tmp/mysql.sock
[mysqld]
port=3306
socket=/tmp/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M
[mysqldump]
quick
[client]
# The following password will be sent to all standard MySQL clients
password="my_password"
[mysql]
no-auto-rehash
connect_timeout=2
[mysqlhotcopy]
interactive-timeout
[mysqld-5.0]
new
!include /home/me/myopt.cnf
!includedir /home/mydir
[mysqld]
!include /home/mydir/myopt.cnf
[mysqldump]
!includedir /home/mydir/my-dump-options
어떠한 옵션 파일도 읽지 말 것.
옵션 파일에서 가져오는 프로그램 이름과 모든 옵션을 프린트 할 것.
주어진 옵션 파일만 사용할 것. file_name 은 그 파일에 대한 전체 경로 이름이다.
이 옵션 파일을 글로벌 옵션 파일 다음에 읽을 것 (하지만 유닉스의 경우에는 사용자 옵션 파일 전에 읽을 것). file_name 은 그 파일에 대한 전체 파일 경로 이름이다.
환경 변수를 사용해서 옵션 지정하기
SET USER=your_name
MYSQL_TCP_PORT=3306
export MYSQL_TCP_PORT
setenv MYSQL_TCP_PORT 3306
옵션을 사용해서 프로그램 변수 설정하기
shell> mysql --max_allowed_packet=16777216
shell> mysql --max_allowed_packet=16M
[mysqld]
key_buffer_size=512M
[mysqld]
key-buffer-size=512M