2009년 7월 28일 화요일

mysqlmanager 4

mysqlmanager기동

shell$ ./bin/mysql -umycom -p -S /tmp/mysqlmanager.sock
또는
shell$ ./bin/mysql -umycom -p --port=2273
...
mysql>SHOW INSTANCES;
+---------------+----------+-
|instance_name | status |
+---------------+----------+-
|mysqld | online |
+---------------+----------+-

mysqlmanager에 대해서는 mysql명령어로 액세스한다. 그때 /etc/mysqlmanager.passwd에 정의되어있는 사용자명과 패스워드가 필요하다.

따라서 mysql명령어의 인수에는 -u하고 -p옵션이 필수이다.

또 mysqlmanager는 로컬머신에서는 /tmp/mysqlmanager.sock 소켓 파일을, TCP/IP에서는 2273번 포트를 표준으로 사용한다. 따라서 소켓파일명이나 TCP/IP 포트번호를 지정하지않으면 안된다.

종래의 MySQL에서는 mysqld_safe에서나 mysql.server스크립트에서도 로컬머신에서 명령어를 실행하는 방법만 있었지만 mysqlmanager에서는 TCP/IP를 이용해서 리모트 머신에서 mysqld의 기동이나 정지가 된다는 것은 평가해줄 만 하다. 대기업 상용 RDBMS와 같이 조작이 가능하게 되었다는 점이다.

그러나 사용하는 경우는 시큐리티에 신경을 잘 써야한다.

SHOW INSTANCES
여기에서 말하는 "인스턴스"라는 것은 mysqld 데몬(프로세스)를 말한다.
SHOW INSTANCES는 정의되어있는 mysqld와 그 상태를 나타낸다. online은 기동중, offline은 정지중이다.
여러개의 mysqld를 my.cnf내에 정의한 경우에는 다음과 같다.

mysql>SHOW INSTANCES;
+---------------+----------+-
|instance_name | status |
+---------------+----------+-
|mysqld | online |
|mysqld1 | online |
|mysqld2 | offline |
+---------------+----------+-

예에서는 [mysqld]와 [mysqld1]은 기동중, [mysqld2]는 정지중이다.

STOP INSTANCE 이름
해당 mysqld 데몬을 정지시킨다.

START INSTANCE 이름
해당 mysqld 데몬을 기동시킨다.

SHOW INSTANCE STATUS 이름
해당 mysqld 버전을 보여준다.

SHOW 이름 LOG FILES
로그 파일 위치와 사이즈를 보여준다.

mysqld 로그 파일 사이즈보기
mysql> SHOW mysqld LOG FILES;
+---------------+----------+----------+-
|Logfile | Path |File size |
+---------------+----------+----------+-
|GENERAL LOG| ... | ... |
+---------------+----------+----------+-
|SLOW LOG| ... | ... |
+---------------+----------+----------+-

SET 이름.변수명=값
지정된 mysqld 변수(옵션) 값을 설정한다.
mysql> SET mysql1.port=6612;
이 예에서는 mysqld1 포트 번호를 6612로 변경한다.

UNSET 이름.변수명
SET의 반대동작이다.
mysql> SET mysql1.port;
이 예에서는 mysqld1 포트 번호를 표준값으로 되돌린다.

FLASH 이름
SET로 변경된 값을 원래의 상태로 되돌리는 명령어이다.

간단하게 명령어를 설명했으나 앞으로 명령어가 확장될 가능성은 상존한다.







2009년 7월 27일 월요일

mysqlmanager 3

mysql.server init스크립트 변경

mysql.server init스크립트는 기본적으로 OS 기동시에 mysqld_safe가 기동하는 것으로 되어있다.
이것을 mysqlmanager가 기동하는 것으로 my.cnf를 변경해보자.

my.cnf에 다음처럼 기술한다. (버전 5.0.19이후만 유효하다. 그 미만버전에서는 init 스크립트 편집이 필요하다. )

my.cnf에 추가
[mysql.server]
use-manager

이것으로 mysql.server init스크립트가 mysqlmanager를 기동하고 그리고 mysqlmanager가 mysqld를 기동한다.

이 밖에도 mysql.server init스크립트를 편집하는 방법도 있다. mysql.server init스크립트내의 다음 부분을 찾아서 1을 0으로 바꾸어놓는다.

mysql.server init스크립트
use_mysqld_safe=1

이것으로 use-manager를 지정하는 것과 같은 동작이 된다. 다만, [mysqld]에 nonguarded 옵션이 지정되어있으면 mysqlmanager는 자기가 기동시에 mysqld를 동작시키지않으므로 주의해야한다.



2009년 7월 24일 금요일

mysqlmanager 2

/etc/my.cnf에 복수의 mysqld를 정의하기

my.cnf에 다음처럼 쓰게 되면 그 그룹이 mysqlmanager에 인식된다.

[mysqldn] (n은 1이상의 정수)

[mysqldn]그룹이 한개도 존재하지 않는다면 mysqlmanager는 [mysqld] 그룹만 관리한다.
[mysqld] 및 [mysqldn]그룹내의 기술방법은 보통 mysqld의 my.cnf의 기술과 다르지 않다.

다만 여기에서 한개 주의가 필요하다.
MySQL 5.0.24/5.1.12-beta에서의 mysqlmanager는 다음 파일들만 읽어들일 수 있다.
다른 명령어처럼 my.cnf를 여러개의 디렉토리로 찾아나서는 짓은 하지 않는다.

  • /etc/my.cnf파일 (windows에서는 mysqlmanager.exe가 존재하는 디렉토리에 있는 my.ini파일)
  • --defaults-file=옵션에서 지정된 파일

/etc/my.cnf 파일예

[manager]
run-as-service
default-mysqld-path = /usr/local/mysql/bin/mysqld

#한개째 정의
[mysqld]
datadir=/data0
port=3306
socket=/tmp/mysql.sock
log-error

#두개째 정의
[mysqld2]
nonguarded
mysqld-path = /usr/local/mysql-5.0/bin/mysqld
datadir =/data2
port=3307
socket=/tmp/mysql.sock2
log-error=/data2/debian.err


옵션
mysqld를 정의할 때 각 [mysqld]그룹에 대해서 다음과같은 옵션을 사용할 수 있다.

nonguarded : 이 옵션이 지정되면 mysqlmanager기동시에 mysqld가 자동으로 기동되지 않는다.
또 msyqlmanager정지시에는 mysqld는 정지하지 않는다.
이 옵션이 없으면 mysqlamanager기동시에는 mysqld가 자동으로 기동한다.
mysqlmanager가 정지하면 mysqld도 같이 정지된다.
mysqld-path=패스: mysqld의 패스를 지정한다. manager사용하는 mysqld하고 다른 경우 지정
shutdown-delay=초: mysqld가 정지하기까지 기다리는 초수. 표준은 35초

에러 출력위치
mysqlmanager에서 mysqld를 기동하는 경우는 필요에 따라서 각 [mysqld]그룹에 log-error옵션을 지정한다.
이 옵션이 없으면 mysqld의 에러출력은 mysqlmanager의 로그파일이다.
--help를 보면 tar.gz바이너리 표준에서는 /usr/local/mysql/data/mysqlmanager.log에 쓰여진다.

mysqld에 아무것도 옵션이 없는 경우, mysqld는 에러 메세지를 표준에러 출력에 출력한다.
mysqld_safe는 그것을 호스트명.err파일에 써 넣는다. 이것이 전통적인 mysqld와 에러 메세지 기록방법이었다.

mysqlmanager는 mysqld_safe와는 달리 에러메세지를 자기의 로그 파일에 써 내린다.
그런 운용에 문제가 없는 경우는 신경 쓸 필요는 없다.
그러나 각각 mysqld별로 err로그를 작성하고픈 경우는 mysqld에 log-error옵션을 지정하면 된다.
log-error옵션은 표준 에러 출력에 출력하는 것 대신에 mysqld자신이 에러출력을 지정된 파일에 쓰는 옵션이다. 이것으로 각각 mysqld별로 에러파일이 작성된다.








2009년 7월 19일 일요일

mysqlmanager 1

①/etc/mysqlmanger.passwd파일 생성
mysqlmanager를 동작시키기위해서는 패스워드 파일이 필요하다.
패스워드 작성은 다음과 같다.

사용자와 패스워드 작성
shell$ ./bin/mysqlmanager --passwd
Creating record for new user.
Enter user name: mycom
Enter password: pass
Re-type password: pass
mycom:*568F812313123123131312312312

이처럼 --passwd옵션을 사용하면 사용자명과 패스워드를 물어본다.
사용자명과 패스워드를 입력하면 예 처럼 "mycom:*568F812313123123131312312312"라는 문자열을 볼수 있다.
이것을 패스워드 파일에 추가하면 되는 것이다.

실제로는 다음과 같이 조작하면 필요한 정보가 패스워드 파일에 추가된다.

사용자와 패스워드를 패스워드 파일에 추가
shell$ ./bin/mysqlmanager --passwd >> /etc/mysqlmanager.passwd
Creating record for new user.
Enter user name: mycom
Enter password: pass
Re-type password: pass