레이블이 mysqlmanager인 게시물을 표시합니다. 모든 게시물 표시
레이블이 mysqlmanager인 게시물을 표시합니다. 모든 게시물 표시

2009년 8월 3일 월요일

Windows에 있어서 mysqlmanager

mysqlmanager를 SCM에 추가
c:\mysql\bin>mysqlmanager --install

SCM등록명은 MySqlManager이다. Windows서비스 표시명은 MySQL Manager로 되어있으나 정식서비스명은 어디까지나 MySqlManager이다.

5.1.12-beta, 5.1.22-rc에서 --install할 때에 서비스명을 지정할 수 없다.
또 --defaults-file=옵션도 지정할 수 없다. 서비스명은 그렇다치더라도 --defaults-file=옵션조차도 지정할 수 없는 것은 사용감이 나쁘고 곤란한 점이다.

mysqlmanager를 SCM에서 삭제
c:\mysql\bin>mysqlmanager --remove


mysqlmanager를 SCM를 이용해서 기동/정지
mysqlmanager를 SCM에 등록한 뒤라면 NET명령어를 이용해서 mysqlmanager의 기동과 정지가 가능하다.

기동예
c:\mysql\bin> NET START MySqlManager

정지예
c:\mysql\bin> NET START MySqlManager


Windows의 mysqlmanager가 읽어들이는 파일
Windows용 mysqlmanager가 읽어들이는 my.cnf파일은 다음 파일뿐이다.
이것도 다른 명령어와는 다르기때문에 혼란을 일으키는 원인이 되고 있다.

  • mysqlmanager.exe파일이 존재하는 디렉토리에 있는 my.ini파일
  • --defaults-file=옵션에서 지정된 파일
또 , mysqlmanager용 패스워드파일은 표준에서는 다음과 같다.

  • mysqlmanager.exe파일이 존재하는 디렉토리에 있는 mysqlmanager.passwd파일

mysqlmanager정지

kill로 정지
root@shell# kill `cat /usr/local/mysql/data/mysqlmanager.pid`

pid파일은 mysqlmanager --help에서 보관위치를 확인할 수 있다.

mysql.server로 정지
만약 mysql.server init스크립트를 use-manager로 동작시키고 있다면 다음처럼 정지한다.
root@shell# mysql.server stop


mysqlmanager 옵션과 표준값

/etc/my.cnf의 [manager]그룹에 mysqlmanager옵션을 적을 수 있다.

[mysqlmanager]그룹이 아니니까 조심하자.

또 /etc/my.cnf에 여러개의 mysqld를 정의할 때도 설명했지만 MySQL 5.0.24/5.1.12-beta의 mysqlmanager는 다음의 파일만 읽어들인다. 다른 명령어처럼 my.cnf를 여러개의 디렉토리에서 찾아다니는 것은 아니니까 주의해야한다.

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

옵션리스트는 --help로 확인가능하다.

mysqlmanager의 옵션
shell$ ./bin/mysqlmanager --help

run-as-service옵션은 mysqlmanager를 데몬으로써 동작시킬 때 필요하다.
이것을 지정하지않으면 front(foreground)로 동작한다. mysqlmanager &로 하는 것도 가능하지만  데몬모드라는 기능이 있으므로 mysqlmanager --run-as-service를 사용한다.

권한등의관계로 /etc/mysqlmanager.passwd파일이 작성할 수 없는 경우에는 password-file옵션으로 패스워드 파일을 지정한다.

TCP포트번호도 port옵션으로 변경가능하다. bind-address옵션으로 Listen하는 IP주소도 지정가능하다.

monitoring-interval은 mysqld가 정지하고 있는가 아닌가 확인하는 간격이다.
default-mysqld-path는 mysqlmanager가 기동시키는 mysqld의 패스 지정이다.

--defaults-file옵션은 인수의 처음으로 하지 않으면 동작하지 않는다.



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



mysqlmanager

여기에서는 버전 5.0에서 도입된 mysqlmanager에 대해서 정리해보자.
mysqlmanager는 mysqld_safe처럼 mysqld를 감시해 만약에 mysqld가 정지하면 자동적으로 mysqld를 다시 기동시킨다.

또 mysqld_multi처럼 여러개의 mysqld를 기동, 정지하는 것이 가능하다.

더욱이 mysql명령어를 사용해서 mysqlmanager를 접속하는 것으로 리모트 머신에서 mysqld를 기동, 정지하는 것도 가능하다.

사용방법은 다음과 같다.

①/etc/mysqlmanager.passwd파일을 생성
이것은 mysqlmanager를 실행할 사용자와 그 패스워드를 기록한다.
다시말하면 사용자와 패스워드를 mysqlmanager용으로 새롭게 작성해두지 않으면 안된다는 것이다.

②필요하면 /etc/my.cnf에 [manager]그룹을 써둔다.

③여러개의 mysqld를 관리하고 싶은 경우는 /etc/my.cnf에 [mysql1][mysql2]... [mysqln]그룹을 정의한다. (n은 자연수)

④mysqlmanager --run-as-service로 기동

⑤만약 OS기동시에 mysqlmanager를 mysqld_safe대신에 기동시키고 싶다면 my.cnf의 [mysql.server]에 use-manger옵션을 써넣던지 mysql.server init 스크립트를 편집한다.



2009년 7월 13일 월요일

MySQL 기동과 정지 2

Unix계열에서 mysqld기동과 정지

1. mysqld를 쉘에서 직접기동

mysqld를 쉘에서 직접기동하는 방법은 다음과 같이 조작한다.

일반 계정에서 직접기동
shell$ mysqld &

그렇지만 mysqld는 root계정으로 기동되면 곧바로 종료하게 된다. 이것은 시큐리티 대책이다.
root계정으로 mysqld를 기동하는 경우에는 다음처럼 mysqld를 실행하는 계정을 지정해서 기동한다.

mysqld를 실행하는 계정을 지정한 기동
root@shell# mysqld --user=mysql &

--user옵션은 my.cnf의 [mysqld]그룹에서 기술가능하다.

2. mysqld_safe를 사용해서 기동
mysqld_safe스크립트는 내부에서 mysqld를 기동한다. 따라서 만약 root계정으로 mysqld_safe를 실행하는 경우는 myqld에 --user옵션을 지정하던지 mysqld_safe에 --user옵셥을 지정할 필요가 있다.

좀더 편하게 하려면 my.cnf의 [mysqld]그룹이던지 [mysqld_safe]그룹에 user옵션을 써넣는다.

mysqld_safe스크립트는 기동하면 상주하면서 mysqld프로세스를 감시한다.
무언가의 장해로 mysqld가 정지한 경우 다시 자동으로 mysqld를 기동한다.

mysqld_safe를 기동(root계정 사용시)
root@shell# mysqld_safe --user=mysql &

3. mysql.server를 사용해서 기동
mysql.server 스크립트는 내부에서 mysqld_safe를 기동한다. 다음처럼 조작한다.

mysql.server를 사용해서 기동
shell$ /user/local/mysql/support-files/mysql.server start

4. mysqld의 정지
기동과 마찬가지로 mysqld정지 방법도 몇개가 준비되어있다.

#mysql.server를 사용해서 정지
mysql.server스크립트를 사용해서 정지가능하다.
mysql.server를 사용해서 정지
shell$ /usr/local/mysql/support-files/mysql.server stop

#mysqladmin을 사용해서 정지

mysqladmin을 사용해서 정지하는 경우는 다음과 같이 조작한다.
mysqladmin을 사용해서 정지
shell$ mysqladmin -uroot shutdown

#kill을 사용해서 정지
kill명령어를 사용해서 정지하는 것이 가능하다. SIGTERM 시그널을 사용해서 MySQL은 안전하게 정지한다.

kill명령어를 사용해서 정지
shell$ kill `cat /usr/local/mysql/data/host.pid`

만약, mysql_safe를 이용해서 mysqld를 기동했을 경우에 최초에 mysqld_safe를 kill 명령어로 정지하고 그 다음에 mysqld를 정지한다.
그렇게 하지 않으면 mysqld_safe가 mysqld를 재기동해 버린다.

또 mysqlmanager로 mysqld를 기동했을 경우에 kill 명령어로 mysqld를 직접 정지시키면 mysqld가 재기동한다.
따라서 먼저 mysqldmanager를 정지시킬 필요가 있다.

kill 명령어를 사용하는 경우 kill -9나 kill -KILL은 절대 사용하지 않도록 해야한다.
이 조작으로 정지시키면 버퍼에 남아있던 데이터가 처리되지않은 상태로 mysqld가 정지하는 꼴이 되기 때문이다. 트랜잭션 버퍼나 INSERT DELAYED버퍼등이 영향을 받는다.