Erro de conexão com o banco de dados mysql

9

Meu aplicativo precisa se conectar com bastante frequência a um banco de dados mysql em outra máquina. No entanto, recebo erros frequentes na conexão; Geralmente, eu posso me conectar, mas após várias tentativas. A mensagem de erro que recebo é:

Mysql.mysql(): Couldn't connect to SQL-server: Lost connection to MySQL server at 'reading authorization packet', system error: 2

Eu li as informações aqui: http://dev.mysql.com/doc/refman/5.0/en/error-lost-connection.html e também os comentários ao bug http://bugs.mysql.com/bug .php? id = 28359 .

Existem várias conexões abortadas, como você pode ver:

mysql> MOSTRA ESTADO GLOBAL COMO 'Aborted_connects';
+ ------------------ + ------- +
| Nome da variável | Valor
+ ------------------ + ------- +
| Conexões abortadas | 2540
+ ------------------ + ------- +

Aumentei o tempo limite de 5 para 15 s:

mysql> mostra variáveis ​​como 'connect_timeout';
+ ----------------- + ------- +
| Nome da variável | Valor
+ ----------------- + ------- +
| connect_timeout | 15
+ ----------------- + ------- +

mas isso não ajudou. Alguma sugestão de como depurar isso? Isso torna a interação do banco de dados terrivelmente lenta quando, em média, ele tenta se conectar 5 vezes antes de funcionar.

Ainda não tentei manter a conexão aberta durante toda a vida útil do aplicativo, isso seria melhor? Como evito que a conexão seja fechada?

Se isso ajudar o computador com os problemas é o Windows 7 de 32 bits, enquanto o servidor mysql está no Debian Linux.

Zitrax
fonte
Sei que isso é apenas um curativo, mas o URL do relatório de erro afirma: "Eu resolvi o problema aumentando a variável global connect_timeout para 30 segundos". Deseja tentar um valor mais alto?
Josek
1
Conforto frio, mas esta é uma pergunta bem escrita. Excelente sequência do artigo de Eric S. Raymond ... +1 para você e boa sorte.
precisa
@ JosephK, é claro que posso tentar, mas duvido que faça muita diferença, pois não vi nenhuma melhoria ao aumentar de 5 para 15. #
Zitrax 19/10/10
Essa é uma das variáveis ​​que não define limite se o valor estiver definido como 0?
Pjmorse 19/10/10
1
Você está certo de que não há algum problema de conectividade entre as máquinas, talvez um problema de rede?
Warner

Respostas:

2

Examinando todos os detalhes de erros e relatórios, suspeito que haja um problema na rede ou no cliente aqui. Algo está corrompendo ou adicionando muita latência aos dados do mysql.

Em uma rede limpa, faça um rastreamento do wireshark e verifique como é a conversa. Garanta que nenhuma configuração de tráfego esteja ocorrendo em qualquer lugar. Parece apenas um problema de 64 bits, portanto verifique uma compilação de 32 bits apenas para garantir que seja o mesmo problema. Verifique em uma caixa do Windows XP - o M $ fez algumas coisas estranhas na pilha de rede do Vista, o que fez com que isso fosse um pouco demorado! Não temos fim de problemas de rede com máquinas Vista e Win7!

Se você gerencia um rastreio do wireshark, cole obin e coloque o link como todos nós gostaríamos de ver.

Khushil
fonte
O que você quer dizer com "parece um problema de 64 bits"? Esta é uma instalação de 32 bits. E desculpe eu mencionei o Vista, este é o Win7, descrição corrigida.
Zitrax 27/10/10
Não estou familiarizado com a depuração com o wireshark. Mas algumas coisas me parecem estranhas, existem alguns pacotes RST e retransimissão TCP marcados novamente, e o tempo de alguns dos pacotes é negativo, como -257,3 segundos.
Zitrax 27/10/10
você pode usar outra opção e testar novamente, por favor. marca diferente se você tiver um? se você pudesse pastebin ou zip e fazer o despejo wireshark disponíveis poderíamos dar uma olhada ...
Khushil