BLOG main image
Their Finest Hour! Since1999..

카테고리

분류 전체보기 (934)
My Page (47)
Linux/Unix (604)
Windows (219)
Database (61)
::MSSQL (45)
::ORACLE (1)
::MYSQL (15)
Programming (1)
Network (0)
ScreenShot (1)
Tip (1)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백


mysql을 설치하여 사용하다보면, 서버부하가 없음에도 불구하고 "Warning...too many connections...."라는 메시지와 함께 MySQL 이 죽는 경우가 있습니다.

원인은 Mysql의 실행환경변수 설정에 있습니다 .

우선 Mysql설치홈의 bin디렉토리에서 "./mysqladmin -u -p variables"라고 해보시면 다음과 유사한 결과를 얻으실수 있습니다.


max_connections | 1000

wait_timeout | 300



와 같은 것을 볼수 있습니다 .



max_connections는 mysql에 connect할수 있는 최대 갯수를 지정해 둔것입니다.

"too many connections"라는 메시지는 이 갯수를 초과해서 connect하려고 할때 발생하는 메시지입니다.



결론부터 말씀드리자면 이 갯수를 적절히 조절해야한다고 말씀드릴수 있습니다.

하지만, max_connections 아래에 있는 wait_timeout이란 variable은 connect된 후에 몇초간 지속적으로 연결을 유지할 것인가를 지정해 둔 것입니다.



이를 설명하기 위해서는 mysql_connect()와 mysql_pconnect의 차이점 그리고, mysql_close()함수에 대한 정확한 이해가 필요한데.



간단히 설명해 보자면, mysql_connect()함수로 DB connect를 했다면 해당스크립트가 종료됨과 동시에 mysql_close()함수를 호출하지않아도 자동으로 연결이 종료됩니다.



하지만, mysql_pconnect()함수는 해당스크립트가 종료된후 mysql_close()함수가 호출되었더라도 연결이 끊어지지않은채로 계속 연결을 유지하고 있습니다.



따라서, 얼핏보기에는 "too many connections"라는 에러메시지는 mysql_pconnect()라는 함수의 사용때문에 발생하는 것 같지만, 그런 이유도 있을수 있지만, 직접적인 이유는 그것이 아니라 MySQL의 메뉴얼을 보면 mysql_connect()함수를 사용하면 해당스크립트의 종료와 함께 연결이 종료된다고 되어있지만

./mysqladmin -u -p processlist"라는 명령어를 통해서 살펴보면 그대로 살아 있음을 알수 있습니다.

맨위에서 살펴보았던 "mysqladmin -u -p variables"의 결과로서 볼수 있는 여러가지 시작옵션들중 "wait_timeout"의 값만큼 서버에 그대로 연결을 유지한채로 남아 있는 것입니다.

따라서, 이것이 "too many connections"의 직접적인 이유인 것입니다.

그렇다면 문제의 해결은 간단하게

실행옵션을 주어서 이들 값들을 자기가 운용하고 있는 서버의 성능과 용도에 알맞게 수정해 주면 됩니다.

MySQL실행시에 주는 실행옵션값은 다음과 같습니다.

./safe_mysqld -O max_connections=1000 -O table_cache=256 -O wait_timeout=300 &


일반적으로 실행시킬때에는 기본옵션을 그대로 사용하는 "./safe_mysqld"라는 옵션을 사용하면.

이렇게 실행하면 36개의 MySQL시작옵션중에서 위의 3가지 옵션들만 값들을 임의로 지정하여 실행시킨 것입니다.

이렇게 실행시킨후에 다시 "mysqladmin -u -p variables"로 옵션들값을 확인해 보면 변경되어 있음을 알수 있을 것이다.



그리고, 참고로 리눅스 실행시에 mysql을 자동으로 시작하도록 설정해둔 /etc/rc.d/rc.local파일에도

위와 같이 옵션을 함께 주어서 실행하도록 설정하는 것을 잊지말기 바랍니다.
Posted by 채종윤
[root@op bin]# ./mysql -h localhost -u isseo -p isseo
Enter password:
ERROR 1203: User myunggoni@localhost has already more than 'max_user_connections' active connections

max_user_connections 는 서버에 허용되는 클라이언트 최대 수를 나타냅니다.
max_user_connections 가 100 으로 설정되어 있을때 100을 초과하는 클라이언트의
접속은 허용되지 않습니다.
웹으로 접속하도록 한 프로세스건, 쉘에서 mysql 클라이언트로 접속하건 물론
마찬가지입니다.
동시 사용자수가 현재의 설정값보다 많지 않은지 또는 프로그램에서 DB 커넥션을
제대로 릴리즈 하지 않는지를 점검할 필요가 있습니다.

/etc/my.cnf 에서 max_user_connections 파라메터 값을 변경하실 수 있습니다.
또한, mysqladmin 유틸리티 또한 하나의 커넥션을 맺어야 하므로 이 에러 상황에서는
mysqladmin 유틸리티의 실행 또한 동일한 에러를 발생할 것입니다.

DB 를 셧다운 한 후 파라메터 값을 변경할 것을 권장합니다.
Posted by 채종윤
Q ./mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server through
socket '/var/lib/mysql/mysql.sock' (2)'
Check that mysqld is running and that the
socket: '/var/lib/mysql/mysql.sock' exists!

mysql접속시도를 하거나 아니면 서버를 실행하려고 mysql.server start 를
실행하면 이런메세지가 뜨면서 실행이 되질 않습니다
왜그런것져?

A.
에러는 /var/lib/mysql/mysql.sock 이 이미 있다는 얘기입니다. 그래서
mysql 이 현재 구동중인 것이 아닌가 확인해 보라는 내용이네요.

mysql process 가 있는지 확인해 보시고, 있으면 kill 로 죽이시고, mysql.sock
을 지우신 후에 재 시작 해 보십시오.
Posted by 채종윤

Total : Today : Yesterday :
채종윤's Blog is powered by Daum & Tattertools.com / Designed by tistory.com