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';
출처 :https://t1.daumcdn.net/cfile/tistory/135898324C5BF1B309
'[DataBase] > MySql' 카테고리의 다른 글
[ERROR]Lock wait timeout exceeded; try restarting transaction (0) | 2015.06.10 |
---|---|
CONCAT() 문자열 합치기 (0) | 2015.06.08 |
SHOW 명령어 (0) | 2015.04.02 |
일별 통계쿼리 (0) | 2015.03.02 |
DDL Database생성 및 새계정으로 권한 주기 (0) | 2014.10.11 |
댓글