음...
다 알고 있을 수도 있지만..초보들과 mysqladmin을 사용해보려는 이들을
위해 한 가지 팁을 전합니다.
리눅스에서
#pstree 하면
safe_mysqld---mysqld---mysqld---2*[mysqld]
이와 같이 thread가 붙어 안없어지는 것을 확인될 때가 있습니다.
그런데 대부분 이럴경우 나두면 max_connection에 걸려 mysql이 사망(?)하는 사태에 걸립니다.
이럴때 mysqladmin을 해보져...
#mysqladmin -i3 processlist -u root -p
Enter password:
+-------+--------+-----------+--------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-------+--------+-----------+--------+---------+------+-------+------------------+
| 13852 | nobody | localhost | aaaa | Sleep | 98 | | |
| 13873 | root | localhost | | Query | 0 | | show processlist |
+-------+--------+-----------+--------+---------+------+-------+------------------+
흠~
현재상황은 aaaa라는 데이터베이스에 접속한 후 thread가 좀비현상(이렇게 표현해도 되나?)에 있는상태입니다. 원인은 다양하겠스나, 필자의 경우에는 어디선가 받은 웹프로그램을 테스트용도로 그대로 달았는데 mysql접속함수가 pconnect인 것이 확인되었다. 한번 씩 접속할 때마다 2*[mysqld] 즉 thread수는 증가하면서 좀비현상을 발생시켜 결국에는 max mysql수에 도달하는 경우가 생겼던
것이다.
이럴 경우 mysql을 재시작하면 되지만 쓰레드와 프로세스는 깨끗이 죽지않아 모든 프로세스를
일일이 죽여야 했던 기억이 있었다....--;
물론 아래의 방법도 그런 종류이나 mysql의 문제를 확인하고 mysqladmin을 활용한 thread죽이기
를 해보았다
[형식]
mysqladmin kill id,id,... -u root -p
#mysqladmin kill 13852 -u root -p
Enter password:
이와 같이 하면 좀비로 붙어있는 thread를 mysql 재시작안하고 처리할 수있다.
무지 깔끔한 명령이고, mysql을 restart하는 일도, 깔끔히 안 죽는 일도 없다.
또한, mysqladmin으로 문제 해결방법을 하나 더 터득하게 된 것이 좋았다.
|