컴퓨터잡담

시스템은 멀쩡한데 느닷없이 mysql 접속거부의 이유는 max_connect_errors과의 연관성

by 디케 posted May 06, 2010
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄


시스템은 멀쩡한데 느닷없이 mysql 접속거부의 이유는 max_connect_errors과의 연관성


MySQL의 호스트 블럭킹 & max_connect_errors

좋은진호님 글



MySQL Server가 동작중인지 원격에서 검사할 때 유의할 점이다.

원격 서버의 MySQL 3306 포트가 살아있는지 검사할 때 단순히 커넥션을 한 후 close하게 되면

MySQL은 비정상적인 접속으로 판단하여 해당 IP를 블럭킹할 수 있다.


MySQL은 비정상적인 접속에 대한 요청수를 카운트를 하는데 max_connect_errors 변수에서 지정한 값을

넘으면 블럭킹을 한다. 기본 값은 10이며, 정기적인 포트 점검이 필요한 경우 이 수를 높여라.


MySQL Manual


 
A.2.5 Host 'host_name' is blocked

If you get the following error, it means that mysqld has received many connect requests from the
host 'host_name' that have been interrupted in the middle:

Host 'host_name' is blocked because of many connection errors.
Unblock with 'mysqladmin flush-hosts'

The number of interrupted connect requests allowed is determined by the value of the
max_connect_errors system variable. After max_connect_errors failed requests, mysqld assumes that
something is wrong (for example, that someone is trying to break in), and blocks the host from
further connections until you execute a mysqladmin flush-hosts command or issue a FLUSH HOSTS
statement. See section 5.2.3 Server System Variables.

By default, mysqld blocks a host after 10 connection errors. You can adjust the value by starting
the server like this:

shell> mysqld_safe --max_connect_errors=10000 &

If you get this error message for a given host, you should first verify that there isn't anything
wrong with TCP/IP connections from that host. If you are having network problems, it will do you no
good to increase the value of the max_connect_errors variable.
 



도움이 되는 글


- MySQL의 안정성은 DNS의 안정성에 달려 있다. 즉, DNS의 설정 상태가 좋지 않을 
경우에는, MySQL 서버도 그 만큼 안정하지 못하게 된다. 
- 만일 네트워크가 안정하지 못할 경우, max_connect_errors가 빠른 시간 안에 10 (디 
폴트 값) 에 도달하게 되고 동일 클라이언트의 향후 커넥션을 거부하게 된다. 

따라서, 이러한 문제를 해결하기 위한 방법을 아래와 같이 제안 한다: 

1. 절대로 외부에서 MySQL 서버에 커넥션을 하도록 만들지 말 것. 
2. MySQL에서 libwrap를 지원하도록 활성화 시키지 말 것. 이것을 활성화 시키는 것 
은 단지 문제를 더 어렵게 하는 것이다. 
3. 여러분의 my.cnf 파일에서 skip_name_resolve를 활성화 시킬 것. 이렇게 하면, 모 
든 호스트 이름에서 점(period)를 비활성화(disable) 시킨다. 모든 All GRANT는 반드 
시 IP주소를 기반으로 되어 있어야 한다. 
4. max_connect_errors를 매우 높게 설정한다: 예를 들면, 99999999. 이렇게 하면 네트 
워크 또는 클라이언트의 문제로 인한 우발적인 커넥션 단절 문제를 피할 수가 있다. 

위의 사용 팁을 활용해서 좋은 결과를 얻기를…….