DBMS 2
DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!
mysqlmanager 는 MySQL의 인스턴스 매니저 (IM)이다. 이 프로그램은 TCP/IP 포트에서 구동하면서 MySQL 데이터 베이스 서버 인스턴스를 모니터링하고 관리하는 데몬 (deamon)이다. MySQL 인스턴스 매니저는 유닉스와 유사한 OS에서는 사용 가능하며, MySQL 5.0.13 이후에는 윈도우에서도 역시 사용 가능해 졌다. MySQL 인스턴스 매니저는 5.0.3 이후에 MySQL 배포판에 포함되었으며, 리모트 서버일 경우라도 MySQL 서버를 시작하고 종료하기 위해 mysqld_safe 스크립트를 대신해서 이것을 사용할 수가 있다. MySQL 인스턴스 매니저는 또한 mysqld_multi 스크립트의 기능(그리고 대부분의 신텍스)을 구현한다. 일반적으로, mysqld MySQL 데이터 베이스 서버는 mysql.server 스크립트와 함께 시작되는데, 이것은 일반적으로 /etc/init.d/ 폴더 안에 상주한다. MySQL 5.0.3에서는, 이 스크립트는mysqlmanager (MySQL 인스턴스 매니저 바이너리)를 호출하여 MySQL을 구동 시킨다. (MySQL의 이전 버전에서는, mysqld_safe 스크립트가 이 역할을 했다.) MySQL 5.0.4 이후에는, init 스크립트 역할이 양쪽 설정 스키마를 통합하게끔 다시 변경 되었다. 5.0.4에서는, init 스타트업 스크립트는 디폴트로 구형 스키마 (mysqld_safe를 호출하는 스키마)를 사용하지만, 스크립트에 있는 use_mysqld_safe 변수를 0 (zero)으로 설정해서 MySQL 인스턴스 매니저를 사용해서 서버를 구동하게끔 할 수가 있다. 이와 같은 경우에 있는 인스턴스 매니저는 MySQL 구성 파일에 지정한 옵션에 따라 동작을 한다. 만약에 구성 파일이 존재하지 않으면, MySQL 인스턴스 매니저는 mysqld라는 이름의 서버 인스턴스를 생성하게 되며, 디폴트 구성 값을 가지고 서버를 시작하려고 시도한다. 이것은 만약에 mysqld가 디폴트 위치에 저장되어 있지 않다면, IM은 mysqld 의 저장 위치를 추정하지 못한다는 것을 의미한다. 만약에 여러분이 MySQL 서버를 표준 위치가 아닌 곳에 설치를 하였다면, 여러분은 구성 파일을 사용해야만 한다. 구성 파일이 존재한다면, IM은 [mysqld] 섹션 (예를 들면, [mysqld], [mysqld1], [mysqld2], 등)을 찾기 위해 그것을 읽게 된다. 각각의 섹션들은 인스턴스를 지정한다. 인스턴스 매니저가 시작될 때, IM은 자신이 발견하는 모든 서버 인스턴스를 시작하려고 시도한다. 디폴트로, IM은 자신이 셧다운될 때 모든 서버 인스턴스를 종료한다. IM에 의해서만 인식되는 특별한 --mysqld-path=path-to-mysqld-binary 옵션이 있다는 것을 알아두기 바란다. 이 변수를 사용해서 IM으로 하여금 mysqld 바이너리가 상주해 있는 곳을 알도록 할 수 있다. 여러분은 서버를 위해 basedir과 datadir 옵션을 설정할 수도 있다. 활성화 된 MySQL 인스턴스 매니저가 있는MySQL 서버를 위한 전형적인 스타트업/셧다운 사이클은 다음과 같다: MySQL 인스턴스 매니저와의 통신은 MySQL 클라이언트-서버 프로토콜을 사용해서 처리된다. 그렇게 함으로서, 여러분은 MySQL C API뿐만 아니라, 표준 mysql 클라이언트 프로그램을 사용해서 IM에 접속을 할 수 있게 된다. IM은 MySQL 4.1 또는 그 이후 버전과 함께 제공되는 클라이언트 및 라이브러리가 사용하는 MySQL 클라이언트-서버 프로토콜 버전을 지원한다. 인스턴스 매니저는 자신의 사용자 정보를 패스워드 파일에 저장한다. 패스워드의 디폴트 이름은 /etc/mysqlmanager.passwd이다. 패스워드 엔트리는 아래의 포맷을 가지고 있다: 만약에 /etc/mysqlmanager.passwd 파일에 엔트리가 없다면, 여러분은 인스턴스 매니저에 접속을 하지 못하게 된다. 새로운 엔트리를 생성하기 위해서는, 인스턴스 매니저를 --passwd 옵션과 함께 호출한다. 그렇게 하면, 새로운 사용자를 추가 하기 위해 그 결과 값이 /etc/mysqlmanager.passwd 파일에 덧 붙여지게 된다. 아래에 예제가 있다: 앞의 audfudd는 아래의 라인이 /etc/mysqlmanager.passwd에 붙여지게 한다: 서버의 상태를 모니터 하기 위해서, MySQL 인스턴스 매니저는 check_connection에 대한 패스워드를 가지고 있는 MySQL_Instance_Manager@localhost 사용자 계정을 사용해서 정상 인터벌 (regular interval) 동안 MySQL 서버 인스턴스에 접속을 시도한다. MySQL 인스턴스 매니저가 서버 상태를 감시하도록 하기 위해 MySQL_Instance_M@localhost user 계정을 만들 필요가 없는데, 그 이유는 서버가 동작 중인지 판단하는 것은 로그인 실패만으로도 충분하기 때문이다. 하지만, 만약에 계정이 존재하지 않으면, 서버는 연결 실패를 자신의 일반 쿼리 로그에 기록한다. MySQL 인스턴스 매니저는 여러 가지의 명령어 라인 옵션을 지원한다. 간단한 리스트를 보기 위해서는, --help 옵션을 사용해서 mysqlmanager를 호출한다. mysqlmanager는 아래의 옵션을 지원한다: 인스턴스 매니저는 표준 my.cnf 파일을 사용한다. 이것은 자신을 위한 옵션을 읽기 위해 [manager] 섹션을 사용하고 인스턴스를 생성하기 위해서는 [mysqld] 섹션을 사용한다. [manager] 섹션은 Section 5.5.3, “MySQL 인스턴스 매니저 명령어 옵션”에 있는 모든 옵션을 가지고 있다. 아래에 [manager] 섹션의 예가 있다: MySQL 5.0.10 이전에는, MySQL 인스턴스 매니저는 /etc/my.cnf, ~/.my.cnf등을 포함해서 MySQL 서버와 동일한 구성 파일을 읽었다. MySQL 5.0.10 이후에는, MySQL 인스턴스 매니저는 유닉스에서만 /etc/my.cnf 파일을 읽고 관리한다, 윈도우에서는, MySQL 인스턴스 매니저가 설치되어 있는 디렉토리 내의 my.ini 파일만 읽는다. 디폴트 옵션 파일은 --defaults-file=file_name 옵션으로 변경할 수가 있다. 인스턴스 섹션은 스타트업 시점에 각 인스턴스에 대한 옵션을 지정한다. 이러한 옵션들은 주로 일반적인 MySQL 서버 옵션이지만, 몇가지는 인스턴스 매니저에만 관련된 옵션들이 있다: 아래에 샘플 인스턴스 섹션이 있다: 일단 여러분이MySQL 인스턴스 매니저에 대한 패스워드를 설정하였고 인스턴스 매니저가 구동 중이면, 여러분은 인스턴스 매니저에 접속할 수가 있다. 여러분은 mysql 클라이언트 툴을 사용해서 표준 MySQL API를 통해 접속을 할 수가 있다. 아래의 명령어 리스트는 현재 MySQL 인스턴스 매니저가 수용하는 것들이며, 예문을 함께 보여준다.mysqlmanager - MySQL 인스턴스 매니저
mysqlmanager - MySQL 인스턴스 매니저
MySQL 인스턴스 매니저를 가지고 MySQL 서버 구동하기
MySQL 인스턴스 매니저에 접속하기와 사용자 계정 생성하기
MySQL 인스턴스 매니저 명령어 옵션
MySQL 인스턴스 매니저 구성 파일
MySQL 인스턴스 매니저가 인식하는 명령어
MySQL 인스턴스 매니저를 가지고 MySQL 서버 구동하기
MySQL 인스턴스 매니저에 접속하기와 사용자 계정 생성하기
인스턴스 매니저 사용자 및 패스워드
상태 모니터를 위한 MySQL 서버 계정
인스턴스 매니저 사용자 및 패스워드
petr:*35110DC9B4D8140F5DE667E28C72DD2597B5C848
shell> mysqlmanager --passwd >> /etc/mysqlmanager.passwd
Creating record for new user.
Enter user name: mike
Enter password: password
Re-type password: password
mike:*00A51F3F48415C7D4E8908980D443C29C69B60C9
상태 모니터를 위한 MySQL 서버 계정
MySQL 인스턴스 매니저 명령어 옵션
도움말 메시지를 화면에 출력한 후에 종료한다.
연결할 IP 주소.
유닉스 시스템에서, 인스턴스 섹션에 아무런 경로도 주지 않았을 때의 MySQL 서버 바이너리경로 이름. 예: --default-mysqld-path=/usr/sbin/mysqld
지정한 파일에서 인스턴스 매니저와 MySQL 서버 설정 값을 읽음. 인스턴스 매니저가 변경하는 모든 구성 내용이 이 파일에 기록됨. 이 파일을 사용할 경우에는 반드시 명령어 라인의 맨 처음에 나와야 하고, 반드시 파일이 존재해야 한다.
윈도우 시스템에서 인스턴스 매니저를 윈도우 서비스로 설치한다. 이 옵션은 MySQL 5.0.11에 추가 됨.
인스턴스 매니저 로그 파일의 경로. 이것은 --run-as-service 옵션과 함께 사용됨.
모니터링 인스턴스의 인터벌 (초 단위). 디폴트는 20초다. 인스턴스 매니저는 모니터링된 각 인스턴스에 접속하여 그 인스턴스가 살아 있는지 (alive) 또는 행 (hang)이 되었는지를 검사한다. 실패가 되는 경우, 인스턴스 매니저는 인스턴스를 여러 번 다시 재 구동한다. 인스턴스 섹션에서 nonguarded 옵션을 사용하면 특정 인스턴스에 대한 이런 동작을 비활성화 시킨다.
패스워드 파일에 대한 엔트리를 준비한 다음에 마침.
이 파일에 있는 인스턴스 매니저 사용자 및 패스워드를 검사. 디폴트 파일은 /etc/mysqlmanager.passwd.
사용할 프로세스 ID 파일. 디폴트는, mysqlmanager.pid라는 이름의 파일이 된다.
들어오는 (incoming) 접속을 위해 사용할 TCP/IP 포트 번호. (IANA가 할당하는 디폴트 번호는 2273).
현재의 디폴트 값을 출력하고 마침. 이 옵션을 사용할 경우에는, 반드시 명령어 라인 맨 처음에 나와야 한다.
윈도우 시스템의 경우, 윈도우 서비스 형태의 인스턴스 매니저를 제거. 이것은 인스턴스 매니저가 이전에 -install과 함께 구동 되었다고 가정한다. 이 옵션은 MySQL 5.0.11에 추가 됨.
엔젤 (angel) 프로세스를 데몬화 (Daemonize)한 후에 시작함. 실패할 경우, 인스턴스 매니저를 재 구동 시킴.
유닉스 시스템의 경우, 들어오는 (incoming) 접속을 위해 사용될 유닉스 소켓. 디폴트 파일은/tmp/mysqlmanager.sock이다.
윈도우 시스템의 경우, 단독 (standalone) 모드에서 인스턴스 매니저를 구동한다. 이 옵션은 5.0.13에서 추가됨.
mysqlmanager를 시작하고 구동 시킬 사용자 이름. mysqld 서버를 구동시키기 위해 사용한 사용자 계정을 가지고 mysqlmanager를 구성할 것을 권장한다. (이 문장에서 쓰인 “사용자 (User)”는 시스템 로그인 계정을 참조하고, 그랜트 테이블에 있는 MySQL 사용자를 참조하지는 않는다.)
버전 정보를 보여 주고 마침.MySQL 인스턴스 매니저 구성 파일
# MySQL Instance Manager options section
[manager]
default-mysqld-path = /usr/local/mysql/libexec/mysqld
socket=/tmp/manager.sock
pid-file=/tmp/manager.pid
password-file = /home/cps/.mysqlmanager.passwd
monitoring-interval = 2
port = 1999
bind-address = 192.168.1.5
mysqld 서버 바이너리에 대한 경로 이름.
인스턴스가 셧다운되기를 기다려야 하는 인스턴스 매니저 대기 시간 (초). 디폴트는 35초. 이 대기 시간이 끝나게 되면, 인스턴스 매니저는 인스턴스가 행 (hang) 상태가 된 것으로 간주하고 재차 종료를 시도한다. 큰 테이블에서 InnoDB를 사용한다면, 이 값을 늘리도록 한다.
여러분이 특정 인스턴스에 대해 인스턴스 매니저 모니터링 기능을 비활성화 시키고자 한다면 이 옵션을 지정하도록 한다.
[mysqld]
mysqld-path=/usr/local/mysql/libexec/mysqld
socket=/tmp/mysql.sock
port=3307
server_id=1
skip-stack-trace
core-file
skip-bdb
log-bin
log-error
log=mylog
log-slow-queries
[mysqld2]
nonguarded
port=3308
server_id=2
mysqld-path= /home/cps/mysql/trees/mysql-5.0/sql/mysqld
socket = /tmp/mysql.sock5
pid-file = /tmp/hostname.pid5
datadir= /home/cps/mysql_data/data_dir1
language=/home/cps/mysql/trees/mysql-5.0/sql/share/english
log-bin
log=/tmp/fordel.log
MySQL 인스턴스 매니저가 인식하는 명령어
출처 : MySQL 코리아
이 명령어는 인스턴스를 시작하도록 시도한다.
mysql> START INSTANCE mysqld4;
Query OK, 0 rows affected (0,00 sec)
이 명령어는 인스턴스가 종료하도록 시도한다.
mysql> STOP INSTANCE mysqld4;
Query OK, 0 rows affected (0,00 sec)
읽어온 모든 인스턴스를 보여준다.
mysql> SHOW INSTANCES;
+---------------+---------+
| instance_name | status |
+---------------+---------+
| mysqld3 | offline |
| mysqld4 | online |
| mysqld2 | offline |
+---------------+---------+
3 rows in set (0,04 sec)
인스턴스에 대한 상태와 버전 정보를 보여준다.
mysql> SHOW INSTANCE STATUS mysqld3;
+---------------+--------+---------+
| instance_name | status | version |
+---------------+--------+---------+
| mysqld3 | online | unknown |
+---------------+--------+---------+
1 row in set (0.00 sec)
인스턴스가 사용한 옵션을 보여준다.
mysql> SHOW INSTANCE OPTIONS mysqld3;
+---------------+---------------------------------------------------+
| option_name | value |
+---------------+---------------------------------------------------+
| instance_name | mysqld3 |
| mysqld-path | /home/cps/mysql/trees/mysql-4.1/sql/mysqld |
| port | 3309 |
| socket | /tmp/mysql.sock3 |
| pid-file | hostname.pid3 |
| datadir | /home/cps/mysql_data/data_dir1/ |
| language | /home/cps/mysql/trees/mysql-4.1/sql/share/english |
+---------------+---------------------------------------------------+
7 rows in set (0.01 sec)
인스턴스가 사용한 모든 로그 파일을 보여준다. 결과 셋은 로그 파일의 경로와 크기를 가지고 있다. 만약에 구성 파일에 아무런 로그 파일 경로도 지정되지 않았다면 (예를 들어, log=/var/mysql.log), 인스턴스 매니저는 그 로그 파일의 위치를 추정하게 된다. 만일 인스턴스 매니저가 로그 파일의 위치를 추정할 수 없다면, 여러분은 구성 파일의 인스턴스 섹션에 적절한 로그 옵션을 사용해서 로그 파일의 위치를 지정해야 한다.
mysql> SHOW mysqld LOG GENERAL 21, 2;
+---------------------+
| Log |
+---------------------+
| using password: YES |
+---------------------+
1 row in set (0.00 sec)
mysql> SET mysqld2.port=3322;
구성 파일의 변경은 MySQL 서버가 재 구동되기 까지는 영향을 주지 않는다. 또한, 이러한 변경은 FLUSH INSTANCES 명령어가 실행되기 까지는 인스턴스 매니저의 로컬 캐시에 저장되지 않는다.
Query OK, 0 rows affected (0.00 sec)
이 명령어는 인스턴스 구성 파일에서 옵션을 제거한다.
mysql> UNSET mysqld2.port;
구성 파일의 변경은 MySQL 서버가 재 구동되기 까지는 영향을 주지 않는다. 또한, 이러한 변경은 FLUSH INSTANCES 명령어가 실행되기 까지는 인스턴스 매니저의 로컬 캐시에 저장되지 않는다.
Query OK, 0 rows affected (0.00 sec)
이 명령어는 인스턴스 매니저가 구성 파일을 다시 읽도록 만들고 내부 구조를 다시 만들도록 한다. 이 명령어는 구성 파일을 편집한 후에 수행해야 한다. 이 명령어는 인스턴스를 재 구동 시키지는 않는다.
mysql> FLUSH INSTANCES;
Query OK, 0 rows affected (0.04 sec)