Nikon Photoschool 지역순회편 (대전)Total 527 : Today 2 : Yesterday 2
일시 : 2008년 9월 27일 (토) 14:00 ~ 20:00
장소 : 대전 컨벤션 센터
D700, D90의 새로운 기능 눈으로 확인 할 수 있는 기회일거 같습니다.
으.. D80 산지 일년 조금 넘었는데 이렇게 좋은 신제품이 출시되다니...


Max connections 에러가 발생하면 PHP페이지에 Too many connection가 나옵니다.
이는 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 &
#mysqld_safe -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에서]
mysql> show variables like '%max_connection%';
mysql> show variables like 'wait_timeout';
[커넥션 확인]
mysql> show full processlist
[출처] mysql-too many connection|작성자 요루짱
MySQL 설정 파일(my.cnf or my.ini) 에 직접 추가 한 다음 재실행을 하셔도 적용이 됩니다.
[mysqld]
max_connections = 256
table_cache = 128
wait_timeout = 60