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버퍼등이 영향을 받는다.