연결이 중단되었습니다 (통신 패킷을 읽는 중 오류가 발생했습니다) unblock with

mysql error.log는

[Warning] Aborted connection 320935 to db: '...' user: '...' host: '...' (Got an error reading communication packets)

클라이언트 쪽이 얻는 동안 :

Lost connection to MySQL server at 'reading initial communication packet', system error: 111
Lost connection to MySQL server at 'reading authorization packet', system error: 0
and after a while: Host '...' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

이것에 관한 mysql 매뉴얼 과 많은 다른 스레드를 읽었습니다 . 그래서 my.cnf에서 일부 값을 변경했습니다.

max_allowed_packet      = 512M
connect_timeout = 60
net_read_timeout = 120
innodb_buffer_pool_size = 5G

연결이 끊어진 쿼리 로그를 살펴 보았습니다.

22400 Connect user@host on dbname
22400 Query SELECT @@sql_mode
22400 Query     SET SESSION sql_mode=''
22400 Query     SET NAMES utf8
22400 Init DB   dbname
22400 Init DB   dbname

테이블 상태를 확인했습니다. bind-address는 서버 IP이지만 외부에서 연결할 수 있어야합니다.

Aborted_connects is 196



답변

제한된 데이터를 기반으로 클라이언트와 MySQL 서버 (호스트에 직접있을 수 있음) 사이에 방화벽이있어서 3306을 MySQL 서버에 허용하지만 초기 SYN 요청에 대한 응답 패킷을 차단하고 있는지 궁금합니다.

TCP 쪽에서 무슨 일이 일어나고 있는지 확인하기 위해 양쪽에서 패킷 덤프를 수행하거나 양쪽에 존재하는 방화벽을 검사 할 수 있습니다.


답변

나는 이것이 MySQL 문제가 아니라고 생각합니다.

전송 계층이 정상인지 확인하십시오. telnet [db_server] 3306?를 사용하여 TCP 연결을 얻을 수 있습니까 ?

클라이언트와 서버가 연결을 SSL로 암호화해야하는지에 대해 동의하고 있습니까?

공개 인터넷을 통해 mysql 연결을 실행하려는 많은 상황을 생각할 수 없습니다. 이것은 ‘외부에서 연결할 수 있음’이 의미하는 것입니다. 암호화되지 않은 경우 이는 큰 보안 위험이며 각 연결에 대해 SSL을 설정하는 오버 헤드가 너무 많아 대부분의 용도에 사용할 수 없습니다. 어떤 종류의 영구 암호화 터널을 사용하고 싶을 수도 있습니다.


답변

중단 된 연결은 MySQL 오류 로그에 기록되지 않은 MySQL의 연결 오류로 간주됩니다. 손실 된 TCP 연결은 오류로 기록되지 않지만 호스트는 차단 됩니다.를 참조하십시오 .


답변