DBMS 2
DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!
이 섹션에서는 MySQL 서버인 mysqld를 구동할 때 사용하는 프로그램들에 대해 설명을 하기로 한다. mysqld_safe는 유닉스와 NetWare에서 mysqld 서버를 구동 시키는 권장 방법이다. mysqld_safe는 에러가 발생했을 때 서버를 재 구동 시키고 런타임 정보를 에러 로그에 기록하는 것과 같은 안전 기능을 추가로 가지고 있다. NetWare-특성 동작은 이 섹션 후반부에서 다시 하기로 한다. Note: 이전 MySQL버전들과의 호환성을 유지하기 위해서, MySQL 바이너리 배포판은 여전히 mysqld_safe에 대한 심볼릭 링크로 safe_mysqld를 포함하고 있다. 하지만, 이 기능은 향후에 완전히 삭제될 예정이므로 이것에 의존하지 말길 바란다. 디폴트로, mysqld_safe는 mysqld-max가 존재하면 이것을 시작하고자 하며, 그것이 존재하지 않으면 mysqld를 시도한다. 이러한 동작 구현에 대해서는 잘 숙지해야 한다: 디폴트 동작을 없애고 여러분이 원하는 서버의 이름을 명확하게 지정하기 위해서는, --mysqld 또는 --mysqld-version 옵션을 mysqld_safe에 지정한다. 또한 -ledir를 사용해서 mysqld_safe가 서버를 찾는 디렉토리를 지정하도록 할 수도 있다. mysqld_safe에 대한 많은 옵션들은 mysqld에 대한 옵션들과 모두 동일하다. Section 5.2.1, “mysqld 명령어 옵션”을 참조할 것. 명령어 라인에서 mysqld_safe에 지정되는 모든 옵션들은 mysqld에 전달된다. 만약에 mysqld_safe에만 해당되고 mysqld는 지원하지 않는 옵션을 사용하고자 한다면, 명령어 라인에서 그것들을 지정하지 않으면 된다. 대신에, 옵션 파일 그룹의 [mysqld_safe] 안에 그 옵션들을 넣어 둔다. Section 4.3.2, “옵션 파일 사용하기”를 참조할 것. mysqld_safe는 옵션 파일에 있는 [mysqld], [server], 그리고 [mysqld_safe] 섹션에서 모든 옵션을 읽는다. 이전 버전과의 호환성을 위해서, mysqld_safe는 여러분이 5.0을 설치할 때 [safe_mysqld] 섹션을 [mysqld_safe] 로 재 명명했다고 하더라도 이 섹션도 함께 읽게 된다. mysqld_safe는 아래의 옵션들을 지원한다: 옵션 파일에 이름을 주기 위해 --defaults-file 또는 --defaults-extra-option 옵션을 가지고 mysqld_safe를 실행한다면, 옵션은 반드시 명령어 라인에서 첫번째로 주어져야 한다. 그렇지 않으면 옵션은 사용되지 않는다. 예를 들면, 다음 명령어는 네임드 옵션 파일을 사용하지 않게 된다: 대신에, 아래의 명령어를 사용한다: 일반적인 경우에 mysqld_safe 스크립트는 소스 또는 바이너리 배포판을 설치한 서버를 구동 시키기 위해 작성된다. mysqld_safe는 아래의 조건들 중에 하나가 트루 (true)일 것으로 기대한다: mysqld_safe는 자신의 동작 디렉토리에 관련하여 서버와 데이터 베이스를 찾으려고 시도하기 때문에, 여러분이 MySQL 설치 디렉토리에서 mysqld_safe를 구동 시키는 한 바이너리 배포판을 어디에도 설치할 수가 있다: 만약에 mysqld_safe가 실패하면, 비록 MySQL 설치 디렉토리에서 호출을 한 경우라도, 여러분은 --ledir 와 --datadir 옵션을 지정해서 서버와 데이터 베이스가 저장되어 있는 디렉토리를 가리키도록 할 수 있다. 일반적인 경우에는mysqld_safe 스크립트 수정하지 말도록 한다. 대신에, my.cnf 옵션 파일의 [mysqld_safe] 섹션에 있는 옵션 또는 명령어 라인의 옵션을 사용해서 mysqld_safe를 구성한다. 드문 경우이긴 하지만, mysqld_safe를 직접 편집 해서 서버가 올바르게 구동되도록 해야 할 경우도 있긴 하다. 하지만, 이렇게 하게 되면, 여러분이 수정한 mysqld_safe가 MySQL을 나중에 업그레이드 할 때 없어지기 때문에, 복사본을 마리 만들어 두어야 한다. 유닉스 시스템 상의 MySQL 배포판은 mysql.server라는 이름의 스크립트를 가지고 있다. 이것은 시스템 서비스를 시작/종료 하는 시스템-V 형태의 구동 디렉토리 (System V-style run directory)를 사용하는 리눅스와 솔라리스와 같은 시스템에서 사용된다. 이것은 또한 MySQL을 위한 Mac OS X 스타트업 아이템에 의해서도 사용된다. mysql.server는 여러분의 MySQL 설치 디렉토리 아래에 있는 support-files 디렉토리 또는 MySQL 소스 배포판에서도 찾을 수 있다. 여러분이 리눅스 서버 RPM 패키지 (MySQL-server-VERSION.rpm)를 사용한다면, mysql.server 스크립트는 mysql라는 이름을 가지고 /etc/init.d 디렉토리에 설치될 것이다. 여러분은 이것을 수동으로 설치할 필요는 없다. Section 2.4, “리눅스에 MySQL 설치하기”를 참조할 것. 몇몇 벤더들은 mysqld와 같은 별도의 이름 아래에 스타트업 스크립트를 설치하는 RPM 패키지를 제공한다. 여러분이 소스 배포판을 사용하거나 또는 자동으로 mysql.server를 설치하지 않는 바이너리 배포판을 사용해서 MySQL을 설치한다면, 여러분은 이것을 수동으로 설치해야 한다. 설치 설명서는 Section 2.9.2.2, “자동으로 MySQL 시작하기 및 종료하기”를 참조할 것. mysql.server는 옵션 파일의 [mysql.server] 와 [mysqld] 섹션에서 옵션을 읽는다. 이전 버전과의 호환성을 위해서, [mysql_server] 섹션도 함께 읽는다. mysqld_multi는 서로 다른 유닉스 소켓 파일과 TCP/IP 포트상에서 연결을 기다리는 mysqld 프로세스를 관리하기 위한 것이다. 이것은 서버를 시작 또는 종료할 수 있으며, 또는 서버의 현재 상태를 보고할 수도 있다. MySQL 인스턴스 매니저는 다중 서버를 관리하는 것을 달리 의미하는 용어다. mysqld_multi 는 my.cnf (또는 --config-file 옵션으로 이름 붙여진 파일)에서 [mysqldN]라는 이름의 그룹을 검색한다. N 는 모든 양수 정수가 될 수 있다. 이 번호는 다음의 섹션에서 옵션 그룹 번호 또는 GNR로 참조될 것이다. 그룹 번호는 각 그룹을 구분하며 여러분이 시작, 종료, 또는 상태 레포트를 받고자 원하는 서버가 어떤 것인지를 지정하기 위한 mysqld_multi의 인수로서 사용된다. 이러한 그룹 내에 열거되어 있는 옵션들은 mysqld를 구동시키기 위해 사용하는 [mysqld] 그룹 내에서 사용하는 것과 동일한 것들이다. 하지만, 다중 서버를 사용할 때에는, 각자의 서버는 유닉스 소켓 파일 및 TCP/IP 포트 번호와 같은 것에 대해 자신만의 옵션 값을 가져야 한다. 다중 서버 환경에서 서버 별로 고유의 값을 가져야만 하는 옵션에는 어떤 것이 있는지 보다 자세히 알아보기 위해서는 Section 5.13, “동일 서버에서 다중의 MySQL서버 구동 시키기”를 참조하기 바란다. mysqld_multi를 호출하기 위해서는 아래의 신텍스를 사용한다: start, stop, 그리고 report는 수행할 동작을 가리키는 것이다. 여러분은 옵션 이름 다음에 나오는 GNR 리스트에 따라서, 단일 서버 또는 다중 서버에 대한 지정 동작을 실행을 할 수가 있게 된다. 만약에 리스트가 없는 경우에는, mysqld_multi는 옵션 파일에 있는 모든 서버에 대해서 연산을 실행하게 된다. 각각의 GNR 값은 옵션 그룹 번호 또는 그룹 번호의 범위를 나타낸다. 그 값은 옵션 파일에 있는 그룹 이름의 맨 끝에 있는 번호이다. 예를 들면, [mysqld17]의 GNR 는 17이 된다. 번호의 범위를 지정하기 위해서는, 처음 번호와 마지막 번호 사이에 대시를 넣어서 구분한다. GNR 값 10-13은 그룹 [mysqld10]에서 [mysqld13]를 표시한다. 다중 그룹 또는 그룹 범위는 명령어 라인에서 지정할 수 있는데, 콤마로 구분을 한다. GNR 리스트에는 화이트스페이스 문자 (스페이스 또는 탭)가 없어야 한다; 화이트 스페이스 다음에 오는 문자는 모두 무시된다. 아래의 명령어는 옵션 그룹 [mysqld17]을 사용해서 단일 서버를 시작하게 한다: 아래의 명령어는 옵션 그룹 [mysqld8] 및 [mysqld10] ~ [mysqld13]을 사용해서 여러 대의 서버를 종료한다: 옵션 파일을 설정하는 방법에 대한 예를 보기 위해서는, 아래의 명령어를 사용한다: mysqld_multi는 아래의 옵션을 지원한다: mysqld_multi에 대해서는 몇 가지 노트가 있다: 아래 예제에서는 여러분이 mysqld_multi를 가지고 옵션 파일을 어떻게 설정을 하는지를 보여 주고 있다. mysqld 프로그램이 시작되거나 또는 종료하는 순서는 옵션 파일에 어떤 순서로 되어 있는지에 달려 있다. 그룹 번호는 깨지지 않는 시퀀스 (unbroken sequence) 구성에 필요가 없다. 첫 번째와 다섯 번째의 [mysqldN] 그룹은 이 예제에서 의도적으로 생략 되었는데, 이것은 여러분이 옵션 파일에서 “갭 (gap)”을 가질 수 있음을 알려 주기 위함이다. 이것은 여러분에게 보다 많은 유연성을 제공한다.MySQL 서버 스타트업 프로그램
MySQL 서버 스타트업 프로그램
mysqld_safe- MySQL 서버 스타트업 스크립트
mysql.server- MySQL 서버 스타트업 스크립트
mysqld_multi- 다중 MySQL 서버 관리
mysqld_safe- MySQL 서버 스타트업 스크립트
도움말 메시지를 화면에 출력한 다음에 종료한다. ( MySQL 5.0.3에 추가 됨)
(NetWare에만 해당됨) NetWare상에서는, mysqld_safe는 스크린 존재 (presence)를 제공한다. 여러분이 mysqld_safe NLM를 셧다운 하면, 스크린은 디폴트로 사라지지 않는다. 대신에 사용자 입력용 프롬프트를 보여준다:
*<NLM has terminated; Press any key to close the screen>*
NetWare가 자동으로 스크린을 닫게 하기 위해서는, --autoclose옵션을 mysqld_safe에 사용한다.
MySQL 설치 디렉토리 경로.
mysqld가 생성하는 코어 (core) 파일의 크기. 옵션값은 ulimit -c에 전달 된다.
데이터 디렉토리의 경로.
일반적인 옵션 파일과 함께 읽어야 할 옵션 파일의 이름. 이것이 사용될 경우에는 반드시 명령어 라인 처음에 나와야 한다.
일반적인 옵션 파일 대신에 읽혀 지는 옵션 파일의 이름. 만약에 이것을 사용할 경우에는 명령어 라인의 첫 번째 옵션이 되어야 한다.
mysqld_safe가 서버를 찾지 못할 경우, 이 옵션을 사용하여 서버가 저장되어 있는 디렉토리경로 이름을 가리키도록 한다.
에러 로그를 지정한 파일에 기록한다. Section 5.12.1, “에러 로그”를 참조할 것.
여러분이 시작하고자 하는 서버 프로그램의 이름 (ledir 디렉토리에 있음). 이 옵션은 여러분이 바이너리 배포판을 사용하고는 있지만 데이터 디렉토리가 바이너리 배포판이 아닌 곳에 있는 경우에 필요하게 된다. 만약에 mysqld_safe가 서버를 찾지 못할 경우, --ledir 옵션을 사용해서 서버가 저장되어 있는 디렉토리 경로 이름을 가리키도록 한다.
이 옵션은 --mysqld 옵션과 비슷하지만, 여러분은 서버 프로그램 이름에 대한 접미사만 지정하면 된다. 베이스 이름은 mysqld라고 간주한다. 예를 들면, --mysqld-version=max를 사용한다면, mysqld_safe는 ledir 디렉토리에 있는 mysqld-max 프로그램을 구동 하기 시작한다. --mysqld-version에 대한 인수가 비어 있다면, mysqld_safe는 ledir 디렉토리에 있는 mysqld를 사용한다.
지정한 값에 대한 서버 스케쥴링 우선 순위를 설정하기 위해 nice 프로그램을 사용한다.
어떠한 옵션 파일도 읽지 않는다. 만약에 이것이 사용될 경우에는 명령어 라인에서 첫 번째 옵션이 되어야 한다.
mysqld가 열 수 있는 파일의 숫자. 옵션 값은 ulimit -n에 전달 된다. 이것이 올바르게 동작을 하기 위해서는 root로 mysqld_safe를 구동 시켜야 한다!
프로세스 ID 파일의 경로 이름.
서버가 TCP/IP 연결을 기다릴 때 사용하는 포트 번호. 포트 번호는 서버가 root 시스템 사용자로 구동되지 않는 한 반드시 1024 또는 그 이상 이어야 한다.
서켓 파일.
지정한 옵션 값에 TZ 타임 존 환경 변수를 설정한다. 올바른 타임 존 지정 포맷에 대해서는 OS 문서를 참고한다.
user_name 이름 또는 숫자로 된 사용자 ID user_id를 갖고 있는 사용자로 mysqld 서버를 구동 시킨다. (여기에서 “사용자 (User)”는 시스템 계정을 의미하며, 그랜트 테이블 안에 있는 MySQL 사용자를 가리키는 것은 아니다.)
mysql> mysqld_safe --port=port_num --defaults-file=file_name
mysql> mysqld_safe --defaults-file=file_name --port=port_num
shell> cd mysql_installation_directory
shell> bin/mysqld_safe &
mysql.server- MySQL 서버 스타트업 스크립트
mysqld_multi- 다중 MySQL 서버 관리
shell> mysqld_multi [options] {start|stop|report} [GNR[,GNR] ...]
shell> mysqld_multi start 17
shell> mysqld_multi stop 8,10-13
shell> mysqld_multi --example
도움말 메시지를 출력한 후에 종료한다.
대신 사용할 옵션 파일의 이름을 지정한다. 이것은 mysqld_multi가 [mysqldN] 옵션 그룹을 어디에서 찾을지 알려준다. 이 옵션 파일이 없으면, 모든 옵션은 일반적인 my.cnf 파일에서 읽혀 진다. 이 옵션은 mysqld_multi가 자신의 옵션을 읽어야 하는 곳에 대해서는 영향을 주지 않는데, 이것은 항상 일반적인 my.cnf 파일 안에 있는 [mysqld_multi] 그룹에서 얻어진다.
샘플 옵션 파일을 출력 한다.
로그 파일의 이름을 지정한다. 파일이 존재한다면, 로그 결과가 뒤에 붙게 된다.
서버를 종료하기 위해 사용되는 mysqladmin 바이너리.
사용될 mysqld 바이너리. mysqld_safe 역시 이 옵션에 대한 값으로 지정할 수 있다는 것을 알아두기 바란다. 만약에 mysqld_safe를 사용해서 서버를 구동 시켰다면, 여러분은 이에 대응하는 [mysqldN] 옵션 그룹에 mysqld 또는 ledir 옵션들을 포함 시킬 수가 있게 된다. 이러한 옵션들은 mysqld_safe가 구동 시켜야 하는 서버의 이름과 서버가 저장되어 있는 디렉토리의 경로 이름을 가리킨다.
예제:
[mysqld38]
mysqld = mysqld-max
ledir = /opt/local/mysql/libexec
로그 파일이 아닌 stdout에 로그 정보를 기록 한다. 디폴트로는 로그 파일 결과가 기록된다.
mysqladmin을 호출할 때 사용되는 MySQL 계정의 패스워드. 다른 MySQL 프로그램과는 달리, 이 옵션에 대한 패스워드 값은 필수 사항이다.
침묵 (Silent) 모드; 경고문을 비활성화 시킴.
각각의 MySQL 서버를 유닉스 소켓 파일 대신에 TCP/IP 포트를 통해 연결 시킴. (만약에 소켓 파일이 누락되어 있으면, 서버는 동작은 하겠지만, TCP/IP 포트를 통해서만 접근할 수 있게 된다.) 디폴트로는, 유닉스 소켓 파일을 통해서 연결된다. 이 옵션은 stop 과 report 동작에 영향을 준다.
mysqladmin을 호출할 때 사용하는 MySQL 계정의 사용자 이름.
좀더 자세하게 정보를 표현하도록 한다.
mysqld_multi에 대해서는 몇 가지 노트가 있다:
shell> mysql -u root -S /tmp/mysql.sock -p
여러분은 각각의 mysqld에 대해 이러한 조치를 해야 한다. 각각을 연결할 때에 연결 파라미터 값을 적당히 변경한다. 계정 이름의 호스트 이름 부분은 반드시 여러분이 구동 시키고자 하는 mysqld_multi가 있는 호스트에서 multi_admin을 연결할 수 있게 해 주어야 한다.
Enter password:
mysql> GRANT SHUTDOWN ON *.*
-> TO 'multi_admin'@'localhost' IDENTIFIED BY 'multipass';
------------------------------------------------------------
이 라인이 수행하는 테스트는 성공을 해야 하는데, 그렇지 않을 경우에는 문제가 생기게 된다. See Section 5.4.1, “mysqld_safe - MySQL 서버 스타트업 스크립트”을 참조.
MY_PWD=`pwd`
# Check if we are starting this relative (for the binary release)
if test -d $MY_PWD/data/mysql -a -f ./share/mysql/english/errmsg.sys -a \
-x ./bin/mysqld
------------------------------------------------------------
# This file should probably be in your home dir (~/.my.cnf)
출처 : MySQL 코리아
# or /etc/my.cnf
# Version 2.1 by Jani Tolonen
[mysqld_multi]
mysqld = /usr/local/bin/mysqld_safe
mysqladmin = /usr/local/bin/mysqladmin
user = multi_admin
password = multipass
[mysqld2]
socket = /tmp/mysql.sock2
port = 3307
pid-file = /usr/local/mysql/var2/hostname.pid2
datadir = /usr/local/mysql/var2
language = /usr/local/share/mysql/english
user = john
[mysqld3]
socket = /tmp/mysql.sock3
port = 3308
pid-file = /usr/local/mysql/var3/hostname.pid3
datadir = /usr/local/mysql/var3
language = /usr/local/share/mysql/swedish
user = monty
[mysqld4]
socket = /tmp/mysql.sock4
port = 3309
pid-file = /usr/local/mysql/var4/hostname.pid4
datadir = /usr/local/mysql/var4
language = /usr/local/share/mysql/estonia
user = tonu
[mysqld6]
socket = /tmp/mysql.sock6
port = 3311
pid-file = /usr/local/mysql/var6/hostname.pid6
datadir = /usr/local/mysql/var6
language = /usr/local/share/mysql/japanese
user = jani