본문 바로가기

Warning: mysql_connect(): Too many connections in 에러

서버 돌릴 때 거의 나지 않는 에러가 났다.그래서 알아보게 된 mysql 관련 설정부분.

아무래도 어디서 공격을 한게 아닐까하는 생각이 드는데 에러는 아래와 같다.


Warning: mysql_connect(): Too many connections in


너무 많은 연결이 되어 있다고 하는데 그렇게 되어 있을게 없다. 왜냐하면 개발테스트용 위주이기 때문에 많은 방문자가 있는것도 그렇다고 많은 데이터나 페이지가 있는 것도 아니기 때문이다.


뭔가 루프문에서 try catch를 안해서 로그인이 무한정 돌아서 그런건지 안 끊긴 상태로 지속이 되는 문제가 발생해서 그런건지.


아니면 부하 공격을 어디서 해서 그런건지 알 수 없었다.


서비스 중인  몇몇개도 죄다 디비를 이용을 하고 있는 부분이기 때문에 우선을 다시 돌려야 하기 때문에


콘솔 접속 이후에 service httpd restart, service mysqld restart로 재시작을 해서 지금은 이상이 없는거 같다.


일시적이라면 다행이겠지만 그래서 연결 가능한 갯수가 현재 몇개이길래 이러나 문득 궁금해 졌다.


콘솔에서 mysql -u -p로 로그인을 해본다.


mysql> show variables like 'max_connections';를 해본다.


그냥 혼자 생각이지만 절 때 모자랄 수 없는 수가  value값으로 잡혀 있어서 이런 경우가 생길 수가 없는데 리스타트 하기 전에 한번 꼼꼼히 체킹을 해보고 restart 해야 했는데 서비스가 다 내려가는 바람에 너무 급하게 하다보니 확인을 못하였다.


참고로 이 기회에 늘리는 방법에 대해서 적어보았다.


mysql> set global max_connection=200;


뒤에 원하는 컨넥션의 숫자를 입력을 하면 된다. 물론 설정 이후에 재시작을 해야 한다.


고정적으로 설정을 하고 싶을 경우는 /etc 폴더에 있는 my.cnf 파일에 해당 내용을 적어놓으면 된다.


[mysqld] 항복 부분에

max_connections = 500


을 추가하고 역시 재시작을 하면 된다.


실제 늘어났는지 확인을 하는 방법은


show variables like 'max_connections'; 로 값이 늘어났는지 확인을 해보면 간단하다.


그 밖에

show status where `variable_name` = 'Threads_connected';

show processlist;

SHOW STATUS WHERE `variable_name` = 'Max_used_connections';



서버 관리는 참 쉬운거 같으면서도 잘 돌아가면서도 어느순간 문제가 생기고 한다.

발생은 할 수 있는 사항이긴 하지만 제일 중요한것은 최대한 빨리 그것을 해결하는것이 중요하겠지.


사람들의 인내심의 시간은 생각보다 길지 않다.