
Tenho 100 clientes de PC conectados ao MySQL pela LAN.
Eles estão executando consultas INSERT sem nenhum período específico. Estatisticamente, ao mesmo tempo, não mais do que 10 PCs estão tentando executar a consulta INSERT. Esta não é uma limitação intencional, apenas que as execuções de consultas dependem da atividade de cada usuário do PC.
Cada cliente se conecta e desconecta sempre que precisa executar a consulta INSERT (conectar - inserir - desconectar).
Tudo funcionou bem por vários meses, mas há alguns dias o cliente começou a falhar na conexão.
Cerca de duas vezes por dia, durante 5 a 10 minutos, os clientes não conseguem se conectar. Eles recebem erros de tempo limite. Todos os clientes de PC falham na conexão durante esse período. Nenhum deles consegue se conectar.
A hora da falha é aleatória. Às vezes acontece às 09h00, às vezes às 13h00, etc. A atividade de cada usuário é bastante regular, portanto não há muitas diferenças de um dia para outro. Quero dizer, a hora do dia não parece significativa.
Olhando no lado do servidor, não vejo erros nos logs do MySQL, nenhuma falha de serviço, nenhuma reinicialização do servidor. Eu só tenho o log de erros ativado (sem log de consulta, sem log de consulta lenta).
Então eu estava procurando por um problema de rede, mas os tracerts de PC para servidor e de servidor para PC estavam corretos.
Fiz uma captura de rede no servidor (com wireshark) para ver se encontro o erro lá.
Durante o período de erro (aqueles 5 a 10 minutos), vejo conexões de clientes de PC presas na mensagem de "saudação". O PC cliente não envia uma solicitação de "login" em resposta.
Responder1
Investigando os rastreamentos de rede, encontrei alguns problemas de resolução de nomes.
Estou executando a versão 5.1.41 do MySQL Community Edition. Não sei se isso é verdade para versões mais reais, mas nesta versão, o recurso "resolução de nome" está habilitado por padrão.
Com a resolução de nomes habilitada, cada vez que uma conexão de rede é iniciada, o MySQL tenta resolver o nome do PC do cliente a partir de seu IP.
Se essa resolução de nomes falhar por algum motivo ou atrasar, poderá causar problemas de conexão.
Com a resolução de nomes reduzida, obtemos mais conexões com falha e atrasadas cada vez que um PC cliente tenta novamente e, no final, nenhuma conexão de rede é bem-sucedida.
A solução é desativar a resolução de nomes. Este recurso é importante se você tiver privilégios definidos para alguns usuários do MySQL que dependem do nome do host do cliente. Mas como não temos nenhum privilégio baseado no nome do host do cliente (em vez disso, usamos o endereço IP), podemos desabilitar com segurança o recurso "resolução de nome".
Este é o link que explica isso e me indica a direção certa e o que pesquisar nas capturas de rede: