본문 바로가기

Programmer

[mysql] too many connection

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
 

Max connections 에러가 발생하면 PHP페이지에 Too many connection가 나옵니다.

이는 mysql에서 동시열결가능한 클라이언트수를 넘었기 때문입니다.


MySQL 서버는 동시에 연결될 수 있는 클라이언트의 수가 기본으로 100 명입니다.

동시접속자수를 변경하려면 my.cnf을 수정하고 MySQL 서버를 재시작하면 된다.


이런에러의 원인으로는 다음과 같습니다.

1)

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

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

2)

MySQL의 메뉴얼을 보면 mysql_connect()함수를 사용하면 해당스크립트의 종료와 함께 연결이 종료된다고 되어있지만 ./mysqladmin -u -p processlist라는 명령어를 통해서 살펴보면 그대로 살아 있음을 알수 있다.

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

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


[콘솔에서 커넥션수 알아내기]
$ mysqladmin -u root -p variables | grep max_connection

| max_connections                 | 100

[mysql에서 커넥션수 알아내기]

show variables like '%max%';


이제는, 클라이언트의 동시 접속자를 늘리는 명령입니다.
먼저 mysql을 데몬을 kill 합니다.다시 아래와같이 서버를 재가동합니다.


mysqld_safe --language=korean --datadir=/data --user=mysql --default-character-set=euc_kr  -O max_connections=256 -O table_cache=128 -O wait_timeout=60 &


참고로, 리눅스나 솔라리스 계열에서는 클라이언트의 동시 접속자수가 500 ~ 1,000 까지 가능하다고 합니다.하지만 1000 설정 하려고 해도 4way cpu에 상당히 많은 램이 필요하다고 할고 있습니다.
256이 적당합니다.


여기서 max_connections 는 mysql 에 접속 할 수 있는 최대 사용자를 가르키며...
wait_timeout 은 접속 후 연결을 지속시키는 시간을 말합니다


이렇게 하신 후 다시 확인합니다.

 

[콘솔에서]

$ mysqladmin -u root -p variables | grep max_connection

$ mysqladmin -u root -p variables | grep wait_timeout

[mysql에서]

show variables like '%max_connection%';

show variables like 'wait_timeout';


구글 애드센스 커뮤니티 | 최신 플래시 게임 | 웹강좌 | 토렌트 파일공유