MySQL max connections 설정

Max connections 에러가 발생하면 페이지에 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의 직접적인 이유인 것이다.

그러므로 아래의 값을 조절하여 Max connections 에러를 막을 수 있다.

• max_connections – 최대 동시 접속 가능 수 기본값=100

• wait_timeout – 종료전까지 요청이 없이 기다리는 시간

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

$ mysqladmin -u root -p variables | grep max_connection

| max_connections | 100

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

이제는, 클라이언트의 동시 접속자를 늘리는 명령이다. 먼저 mysql을 종료하고 아래와 같이 서버를 재가동한다.

#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 &

#mysqld_safe -O max_connections=256 -O table_cache=128 -O wait_timeout=60 &

MySQL 설정 파일(my.cnf or 윈도우의 경우는 my.ini) 에 직접 추가 한 다음 재실행을 하셔도 적용이 됩니다.

[mysqld]

max_connections = 500

wait_timeout = 60

MySQL에서 실행하는 방법

mysql> set global max_connections=500;

mysql> set wait_timeout=60;

이렇게 한 후 다시 확인한다.

[콘솔에서]

mysqladmin -u root -p variables | grep max_connection

mysqladmin -u root -p variables | grep wait_timeout

[mysql에서]

mysql> show variables like ‘%max_connection%’;

mysql> show variables like ‘wait_timeout’;

 

 

[펌] http://threestory.tistory.com/6

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다