Conexão interrompida (erro ao ler pacotes de comunicação)

8

O mysql error.log mostra

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

Enquanto o lado do cliente obtém:

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'

Eu li o manual do mysql sobre isso, e muitos outros tópicos. Então eu mudei alguns valores no my.cnf

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

Observou o log de consulta de uma conexão interrompida:

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

Status da tabela verificada. endereço de ligação é o IP do servidor, mas eu preciso ser capaz de conectar de fora.

Aborted_connects is 196
PiTheNumber
fonte
Você pode verificar a qualidade da conexão entre os dois hosts? 100 pings básicos devem fazer ..
melsayed 06/07/14

Respostas:

4

Com base nos dados limitados, pergunto-me se você possui um firewall entre o cliente e o servidor MySQL (pode estar diretamente nos hosts) que permite 3306 ao servidor MySQL, mas está bloqueando os pacotes de resposta à solicitação SYN inicial.

Você pode executar um despejo de pacotes nos dois lados para descobrir o que está acontecendo no lado TCP e / ou verificar os firewalls existentes entre os dois lados.

Matthew Ife
fonte
Obrigado. Quais dados eu poderia fornecer para esclarecer isso? Não tenho um firewall do meu lado, não tenho certeza do outro lado. Principalmente a conexão funciona, então acho que não é um firewall. Tentei despejar pacotes, mas há muito tráfego e o problema aparece apenas algumas vezes por dia. Falha ao definir um filtro que captura apenas os pacotes necessários.
PiTheNumber
4

Eu suspeito que este não é um problema de mysql como tal.

Verifique se a camada de transporte está OK. Você pode obter uma conexão TCP usando telnet [db_server] 3306?

Seu cliente e servidor estão de acordo sobre se a conexão deve ser criptografada em SSL?

Não consigo pensar em muitas situações em que eu gostaria de executar uma conexão mysql pela Internet pública, que suspeito ser o que você quer dizer com 'capaz de se conectar de fora'. Se não criptografado, esse é um grande risco à segurança, e a sobrecarga de configuração do SSL para cada conexão é muito alta para a maioria dos usos. Você pode querer usar algum tipo de túnel criptografado persistente.

mc0e
fonte
o telnet connect e a maioria das conexões funcionam bem apenas de tempos em tempos, esse problema aparece. Sim, é uma conexão pela Internet pública. Gostaria de ter criptografia aqui, mas não controlo a outra extremidade. De qualquer forma, primeiro preciso estabilizar a conexão.
PiTheNumber