between 0 and 1

[MySQL] Too many connection error를 만났을 때 해결 방법 (max_connection 변경을 통한). 그리고 max_connection이 214 이상으로 설정되지 않는 경우 해결 방법 본문

Software Development Engineering/MySQL

[MySQL] Too many connection error를 만났을 때 해결 방법 (max_connection 변경을 통한). 그리고 max_connection이 214 이상으로 설정되지 않는 경우 해결 방법

devxpert.yoon 2018. 7. 1. 17:37
728x90
반응형


mysq



웹사이트/데이터 베이스를 운영하다보면, 쉽게 마주치게 되는 에러가 있는데, 


바로 "Too many connection error" 이다.


이건 MySQL에 허용 동시접속자수가 다 차서, 더 이상 접속할 수 없다는 의미인데.


이 경우, 접속이 끊어지지 않는다면 영원히 MySQL에 접속이 안될 것이며, 서비스는 운영 불가하게 될 것이다.


MySQL에서 동시접속자수는 max_connection 변수로 설정할 수 있다.



max_connection을 변경하는 방법은 크게 2가지가 있다.


1. MySQL에 접속하여 설정값을 변경해주는 방법

2. 환경설정파일 (ex. my.cnf) 에서 변경해주는 방법


1번의 경우 

 - 변경을 해주면 바로 적용이 되지만,

 - MySQL을 다시 실행하게 되면 환경설정파일의 기본값으로 다시 설정된다.


2번의 경우

 - 환경설정파일에서 원하는 값으로 설정을하고

 - MySQL을 다시 실행해야 적용이된다.

 - 한 번 설정하면, MySQL을 다시 실행하더라도 자동으로 적용된다.



위의 1, 2번을 실행하는 방법은 다음과 같다.


1. MySQL에 접속하여 설정값을 변경해주는 방법


 1) mysql 접속하고


 2) mysql> set global max_connections=원하는값; 


    ex. 동시접속수를 500으로 한다면,


mysql> set global max_connections=500;


 3) 설정된 값 확인


mysql> show variables like 'max_connections';

+-----------------+-------+

| Variable_name   | Value |

+-----------------+-------+

| max_connections | 500   |

+-----------------+-------+

1 row in set (0.00 sec)

   


2. 환경설정파일 (ex. my.cnf) 에서 변경해주는 방법


 1) 환경설정파일을 열고

# vim my.cnf


 2) [mysqld] 아래에 다음의 내용을 추가하기


max_connections=400


 3) MySQL 다시 실행하기 (centos7 기준)


# systemctl restart mysql


 4) MySQL에 접속해서 1번과 같은 방법으로 max_connections가 변경되었는지 확인한다.


==================================================================


2번 방법으로 설정하고 max_connections 값을 확인해봤는데, 설정한 값이 214로 나오는 경우가 있다!!!


이건, OS에서 open file의 수를 제한(limit)하고 있어서 발생하는 현상이다.

다음과 같은 방법으로 해결할 수 있다.


1. OS에서 mysql의 open file 개수 제한을 늘려주기


# vim /etc/security/limits.conf


이 파일을 수정한 적이 없다면, 파일 내용은 주석으로 가득차 있을 것이다.

주석 제일 아래에 다음과 같이 mysql 의 open file 개수 제한을 늘려주자


mysql    hard    nofile    4096

mysql    soft     nofile    4096


2. mysqld.service (mysqld 데몬 정보) 수정하기

# vim /usr/lib/systemd/system/mysqld.service


파일 내용 중 [Service] 섹션에 "LimitNOFILE" 변수 추가하기

[Service]

User=mysql

Group=mysql

LimitNOFILE=4096


3. 데몬 다시 로드하고 MySQL 다시 실행하기

# systemctl daemon-reload

# systemctl restart mysql


위의 mysqld.service 데몬 파일을 수정했기 때문에, systemctl daemon-reload를 반드시 해줘야 한다.


이제 mysql에 접속해서 max_connection 정보를 확인해 보면, 214가 아니라 원하는 값으로 설정된 것을 확인할 수 있을 것이다.

다만, 원하는 값만큼 수정이 안될 경우, 앞서 수정한 open 파일의 개수를 더 늘려주면 된다.


참고1) open file의 기본값은 1024이다.

CentOS의 경우 기본값으로 1024로 설정되어 있다.


참고2) open file 1이 mysql connection 개수 1을 의미하는건 아니다.

mysql connection 1은 여러개의 file을 open한다. 그러므로, open file개수를 1000으로 설정했다고 mysql connection을 1000개 만들 수 있는 것은 아님을 유의하자.

728x90
반응형