DBMS 2

DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!

mysqlmanager - MySQL 인스턴스 매니저

DBMS 2
MySQL 가이드
데이터 베이스 관리
mysqlmanager - MySQL 인스턴스 매니저
작성자
admin
작성일
2021-02-19 10:50
조회
1166

mysqlmanager - MySQL 인스턴스 매니저

MySQL 인스턴스 매니저를 가지고 MySQL 서버 구동하기
MySQL 인스턴스 매니저에 접속하기와 사용자 계정 생성하기
MySQL 인스턴스 매니저 명령어 옵션
MySQL 인스턴스 매니저 구성 파일
MySQL 인스턴스 매니저가 인식하는 명령어

mysqlmanager 는 MySQL의 인스턴스 매니저 (IM)이다. 이 프로그램은 TCP/IP 포트에서 구동하면서 MySQL 데이터 베이스 서버 인스턴스를 모니터링하고 관리하는 데몬 (deamon)이다. MySQL 인스턴스 매니저는 유닉스와 유사한 OS에서는 사용 가능하며, MySQL 5.0.13 이후에는 윈도우에서도 역시 사용 가능해 졌다.

MySQL 인스턴스 매니저는 5.0.3 이후에 MySQL 배포판에 포함되었으며, 리모트 서버일 경우라도 MySQL 서버를 시작하고 종료하기 위해 mysqld_safe 스크립트를 대신해서 이것을 사용할 수가 있다. MySQL 인스턴스 매니저는 또한 mysqld_multi 스크립트의 기능(그리고 대부분의 신텍스)을 구현한다.


MySQL 인스턴스 매니저를 가지고 MySQL 서버 구동하기

일반적으로, 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 서버를 위한 전형적인 스타트업/셧다운 사이클은 다음과 같다:


  1. /etc/init.d/mysql 스크립트는 MySQL 인스턴스 매니저를 구동시킨다.
  2. MySQL 인스턴스 매니저는 모든 인스턴스를 시작하고 그것들을 모니터 한다.
  3. 만약에 서버 인스턴스가 실패하면, MySQL 인스턴스 매니저는 그것을 재 구동 시킨다.
  4. 만약에MySQL 인스턴스 매니저가 셧다운 되면 (/etc/init.d/mysql stop 명령어를 가진 인스턴스에 대해), 모든 인스턴스는 MySQL 인스턴스 매니저에 의해 셧다운 된다.
MySQL 인스턴스 매니저에 접속하기와 사용자 계정 생성하기
인스턴스 매니저 사용자 및 패스워드
상태 모니터를 위한 MySQL 서버 계정

MySQL 인스턴스 매니저와의 통신은 MySQL 클라이언트-서버 프로토콜을 사용해서 처리된다. 그렇게 함으로서, 여러분은 MySQL C API뿐만 아니라, 표준 mysql 클라이언트 프로그램을 사용해서 IM에 접속을 할 수 있게 된다. IM은 MySQL 4.1 또는 그 이후 버전과 함께 제공되는 클라이언트 및 라이브러리가 사용하는 MySQL 클라이언트-서버 프로토콜 버전을 지원한다.


인스턴스 매니저 사용자 및 패스워드

인스턴스 매니저는 자신의 사용자 정보를 패스워드 파일에 저장한다. 패스워드의 디폴트 이름은 /etc/mysqlmanager.passwd이다.

패스워드 엔트리는 아래의 포맷을 가지고 있다:



petr:*35110DC9B4D8140F5DE667E28C72DD2597B5C848

만약에 /etc/mysqlmanager.passwd 파일에 엔트리가 없다면, 여러분은 인스턴스 매니저에 접속을 하지 못하게 된다.

새로운 엔트리를 생성하기 위해서는, 인스턴스 매니저를 --passwd 옵션과 함께 호출한다. 그렇게 하면, 새로운 사용자를 추가 하기 위해 그 결과 값이 /etc/mysqlmanager.passwd 파일에 덧 붙여지게 된다. 아래에 예제가 있다:



shell> mysqlmanager --passwd >> /etc/mysqlmanager.passwd
Creating record for new user.
Enter user name: mike
Enter password: password
Re-type password: password


앞의 audfudd는 아래의 라인이 /etc/mysqlmanager.passwd에 붙여지게 한다:



mike:*00A51F3F48415C7D4E8908980D443C29C69B60C9

상태 모니터를 위한 MySQL 서버 계정

서버의 상태를 모니터 하기 위해서, MySQL 인스턴스 매니저는 check_connection에 대한 패스워드를 가지고 있는 MySQL_Instance_Manager@localhost 사용자 계정을 사용해서 정상 인터벌 (regular interval) 동안 MySQL 서버 인스턴스에 접속을 시도한다.

MySQL 인스턴스 매니저가 서버 상태를 감시하도록 하기 위해 MySQL_Instance_M@localhost user 계정을 만들 필요가 없는데, 그 이유는 서버가 동작 중인지 판단하는 것은 로그인 실패만으로도 충분하기 때문이다. 하지만, 만약에 계정이 존재하지 않으면, 서버는 연결 실패를 자신의 일반 쿼리 로그에 기록한다.


MySQL 인스턴스 매니저 명령어 옵션

MySQL 인스턴스 매니저는 여러 가지의 명령어 라인 옵션을 지원한다. 간단한 리스트를 보기 위해서는, --help 옵션을 사용해서 mysqlmanager를 호출한다.

mysqlmanager는 아래의 옵션을 지원한다:


  • --help, -?
    도움말 메시지를 화면에 출력한 후에 종료한다.
  • --bind-address=IP
    연결할 IP 주소.
  • --default-mysqld-path=path
    유닉스 시스템에서, 인스턴스 섹션에 아무런 경로도 주지 않았을 때의 MySQL 서버 바이너리경로 이름. 예: --default-mysqld-path=/usr/sbin/mysqld
  • --defaults-file=file_name
    지정한 파일에서 인스턴스 매니저와 MySQL 서버 설정 값을 읽음. 인스턴스 매니저가 변경하는 모든 구성 내용이 이 파일에 기록됨. 이 파일을 사용할 경우에는 반드시 명령어 라인의 맨 처음에 나와야 하고, 반드시 파일이 존재해야 한다.
  • --install
    윈도우 시스템에서 인스턴스 매니저를 윈도우 서비스로 설치한다. 이 옵션은 MySQL 5.0.11에 추가 됨.
  • --log=file_name
    인스턴스 매니저 로그 파일의 경로. 이것은 --run-as-service 옵션과 함께 사용됨.
  • --monitoring-interval=seconds
    모니터링 인스턴스의 인터벌 (초 단위). 디폴트는 20초다. 인스턴스 매니저는 모니터링된 각 인스턴스에 접속하여 그 인스턴스가 살아 있는지 (alive) 또는 행 (hang)이 되었는지를 검사한다. 실패가 되는 경우, 인스턴스 매니저는 인스턴스를 여러 번 다시 재 구동한다. 인스턴스 섹션에서 nonguarded 옵션을 사용하면 특정 인스턴스에 대한 이런 동작을 비활성화 시킨다.
  • --passwd, -P
    패스워드 파일에 대한 엔트리를 준비한 다음에 마침.
  • --password-file=file_name
    이 파일에 있는 인스턴스 매니저 사용자 및 패스워드를 검사. 디폴트 파일은 /etc/mysqlmanager.passwd.
  • --pid-file=file_name
    사용할 프로세스 ID 파일. 디폴트는, mysqlmanager.pid라는 이름의 파일이 된다.
  • --port=port_num
    들어오는 (incoming) 접속을 위해 사용할 TCP/IP 포트 번호. (IANA가 할당하는 디폴트 번호는 2273).
  • --print-defaults
    현재의 디폴트 값을 출력하고 마침. 이 옵션을 사용할 경우에는, 반드시 명령어 라인 맨 처음에 나와야 한다.
  • --remove
    윈도우 시스템의 경우, 윈도우 서비스 형태의 인스턴스 매니저를 제거. 이것은 인스턴스 매니저가 이전에 -install과 함께 구동 되었다고 가정한다. 이 옵션은 MySQL 5.0.11에 추가 됨.
  • --run-as-service
    엔젤 (angel) 프로세스를 데몬화 (Daemonize)한 후에 시작함. 실패할 경우, 인스턴스 매니저를 재 구동 시킴.
  • --socket=path
    유닉스 시스템의 경우, 들어오는 (incoming) 접속을 위해 사용될 유닉스 소켓. 디폴트 파일은/tmp/mysqlmanager.sock이다.
  • --standalone
    윈도우 시스템의 경우, 단독 (standalone) 모드에서 인스턴스 매니저를 구동한다. 이 옵션은 5.0.13에서 추가됨.
  • --user=user_name
    mysqlmanager를 시작하고 구동 시킬 사용자 이름. mysqld 서버를 구동시키기 위해 사용한 사용자 계정을 가지고 mysqlmanager를 구성할 것을 권장한다. (이 문장에서 쓰인 “사용자 (User)”는 시스템 로그인 계정을 참조하고, 그랜트 테이블에 있는 MySQL 사용자를 참조하지는 않는다.)
  • --version, -V
    버전 정보를 보여 주고 마침.
MySQL 인스턴스 매니저 구성 파일

인스턴스 매니저는 표준 my.cnf 파일을 사용한다. 이것은 자신을 위한 옵션을 읽기 위해 [manager] 섹션을 사용하고 인스턴스를 생성하기 위해서는 [mysqld] 섹션을 사용한다. [manager] 섹션은 Section 5.5.3, “MySQL 인스턴스 매니저 명령어 옵션”에 있는 모든 옵션을 가지고 있다. 아래에 [manager] 섹션의 예가 있다:



# 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


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 서버 옵션이지만, 몇가지는 인스턴스 매니저에만 관련된 옵션들이 있다:


  • mysqld-path = path
    mysqld 서버 바이너리에 대한 경로 이름.
  • shutdown-delay = seconds
    인스턴스가 셧다운되기를 기다려야 하는 인스턴스 매니저 대기 시간 (초). 디폴트는 35초. 이 대기 시간이 끝나게 되면, 인스턴스 매니저는 인스턴스가 행 (hang) 상태가 된 것으로 간주하고 재차 종료를 시도한다. 큰 테이블에서 InnoDB를 사용한다면, 이 값을 늘리도록 한다.
  • nonguarded
    여러분이 특정 인스턴스에 대해 인스턴스 매니저 모니터링 기능을 비활성화 시키고자 한다면 이 옵션을 지정하도록 한다.

아래에 샘플 인스턴스 섹션이 있다:



[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 클라이언트 툴을 사용해서 표준 MySQL API를 통해 접속을 할 수가 있다. 아래의 명령어 리스트는 현재 MySQL 인스턴스 매니저가 수용하는 것들이며, 예문을 함께 보여준다.


  • START INSTANCE instance_name
    이 명령어는 인스턴스를 시작하도록 시도한다.
    mysql> START INSTANCE mysqld4;
    Query OK, 0 rows affected (0,00 sec)

  • STOP INSTANCE instance_name
    이 명령어는 인스턴스가 종료하도록 시도한다.
    mysql> STOP INSTANCE mysqld4;
    Query OK, 0 rows affected (0,00 sec)

  • SHOW INSTANCES
    읽어온 모든 인스턴스를 보여준다.
    mysql> SHOW INSTANCES;
    +---------------+---------+
    | instance_name | status |
    +---------------+---------+
    | mysqld3 | offline |
    | mysqld4 | online |
    | mysqld2 | offline |
    +---------------+---------+
    3 rows in set (0,04 sec)

  • SHOW INSTANCE STATUS instance_name
    인스턴스에 대한 상태와 버전 정보를 보여준다.
    mysql> SHOW INSTANCE STATUS mysqld3;
    +---------------+--------+---------+
    | instance_name | status | version |
    +---------------+--------+---------+
    | mysqld3 | online | unknown |
    +---------------+--------+---------+
    1 row in set (0.00 sec)

  • SHOW INSTANCE OPTIONS instance_name
    인스턴스가 사용한 옵션을 보여준다.
    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)

  • SHOW instance_name LOG FILES
    인스턴스가 사용한 모든 로그 파일을 보여준다. 결과 셋은 로그 파일의 경로와 크기를 가지고 있다. 만약에 구성 파일에 아무런 로그 파일 경로도 지정되지 않았다면 (예를 들어, log=/var/mysql.log), 인스턴스 매니저는 그 로그 파일의 위치를 추정하게 된다. 만일 인스턴스 매니저가 로그 파일의 위치를 추정할 수 없다면, 여러분은 구성 파일의 인스턴스 섹션에 적절한 로그 옵션을 사용해서 로그 파일의 위치를 지정해야 한다.
    mysql> SHOW mysqld LOG GENERAL 21, 2;
    +---------------------+
    | Log |
    +---------------------+
    | using password: YES |
    +---------------------+
    1 row in set (0.00 sec)

  • SET instance_name.option_name=option_value
    
    
  • 이 명령어는 지정된 인스턴스 구성 파일을 편집해서 인스턴스 옵션을 변경하거나 또는 추가하게끔 한다. 인스턴스 매니저는 구성 파일이 /etc/my.cnf에 저장되어 있다고 가정한다. 여러분은 이 파일이 실제로 있는지와 적당한 권한이 허용되었는지를 검사해야 한다.
    mysql> SET mysqld2.port=3322;
    Query OK, 0 rows affected (0.00 sec)

    구성 파일의 변경은 MySQL 서버가 재 구동되기 까지는 영향을 주지 않는다. 또한, 이러한 변경은 FLUSH INSTANCES 명령어가 실행되기 까지는 인스턴스 매니저의 로컬 캐시에 저장되지 않는다.
  • UNSET instance_name.option_name
    이 명령어는 인스턴스 구성 파일에서 옵션을 제거한다.
    mysql> UNSET mysqld2.port;
    Query OK, 0 rows affected (0.00 sec)

    구성 파일의 변경은 MySQL 서버가 재 구동되기 까지는 영향을 주지 않는다. 또한, 이러한 변경은 FLUSH INSTANCES 명령어가 실행되기 까지는 인스턴스 매니저의 로컬 캐시에 저장되지 않는다.
  • FLUSH INSTANCES
    이 명령어는 인스턴스 매니저가 구성 파일을 다시 읽도록 만들고 내부 구조를 다시 만들도록 한다. 이 명령어는 구성 파일을 편집한 후에 수행해야 한다. 이 명령어는 인스턴스를 재 구동 시키지는 않는다.
    mysql> FLUSH INSTANCES;
    Query OK, 0 rows affected (0.04 sec)

출처 : MySQL 코리아