Eu tive o mesmo problema em dois dos meus programas. Meu erro foi este:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
Passo alguns dias para resolver este problema. Eu testei muitas abordagens mencionadas em diferentes sites, mas nenhuma delas funcionou. Por fim, mudei meu código e descobri qual era o problema. Vou tentar falar sobre diferentes abordagens e resumir aqui .
Enquanto procurava na Internet para encontrar a solução para esse erro, descobri que existem muitas soluções que funcionavam para pelo menos uma pessoa, mas outras dizem que não funciona para elas! por que existem muitas abordagens para esse erro?
Parece que esse erro pode ocorrer geralmente quando há um problema na conexão com o servidor . Talvez o problema seja devido à sequência de consultas incorreta ou a muitas conexões com o banco de dados.
Então, sugiro que você tente todas as soluções uma por uma e não desista!
Aqui estão as soluções que eu encontrei na internet e, para cada uma delas, há pelo menos uma pessoa que resolveu o problema com essa solução.
point: Para as soluções que você precisa alterar as configurações do MySQL, você pode se referir ao seguinte:
Aqui estão as soluções:
- alterando o atributo "endereço de ligação"
Remova o comentário do atributo "endereço de ligação" ou altere-o para um dos seguintes Ips:
endereço de ligação = "127.0.0.1"
ou
endereço de ligação = "0.0.0.0"
Se houver uma linha "skip-networking" no seu arquivo de configuração do MySQL, faça um comentário adicionando o sinal "#" no início dessa linha.
- altere "wait_timeout" e "interactive_timeout"
Adicione estas linhas ao arquivo de configuração do MySQL:
wait_timeout = número
Interactive_timeout = número
connect_timeout = número
- verifique as configurações de proxy do sistema operacional
Verifique se os softwares Fire wall ou Anti virus não bloqueiam o serviço MySQL.
- alterar cadeia de conexão
Verifique sua string de consulta. sua cadeia de conexão deve ser algo como isto:
dbName = "my_database";
dbUserName = "root";
dbPassword = "";
String connectionString = "jdbc:mysql://localhost/" + dbName + "?user=" + dbUserName + "&password=" + dbPassword + "&useUnicode=true&characterEncoding=UTF-8";
Verifique se você não possui espaços em sua string. Toda a cadeia de conexão deve continuar sem caracteres de espaço.
Tente substituir "localhost" por sua porta, como 127.0.0.1. Tente também adicionar o número da porta à sua cadeia de conexão, como:
String connectionString = "jdbc:mysql://localhost:3306/my_database?user=root&password=Pass&useUnicode=true&characterEncoding=UTF-8";
Normalmente, a porta padrão para o MySQL é 3306.
Não esqueça de mudar nome de usuário e senha para o nome de usuário e senha do seu servidor MySQL.
- atualize seu arquivo de biblioteca de drivers JDK
- teste diferentes JDK e JREs (como JDK 6 e 7)
- não mude max_allowed_packet
" max_allowed_packet " é uma variável no arquivo de configuração do MySQL que indica o tamanho máximo do pacote, não o número máximo de pacotes. Portanto, não ajudará a resolver esse erro.
- alterar a segurança do tomcat
mude TOMCAT6_SECURITY = yes para TOMCAT6_SECURITY = no
- use a propriedade validationQuery
use validationQuery = "select now ()" para garantir que cada consulta tenha respostas
Adicione este código à sua cadeia de conexão:
&autoReconnect=true&failOverReadOnly=false&maxReconnects=10
Embora nenhuma dessas soluções funcionou para mim, sugiro que você as experimente. Porque há algumas pessoas que resolveram o problema seguindo estas etapas.
Mas o que resolveu meu problema? Meu problema era que eu tinha muitos SELECTs no banco de dados. Cada vez que eu criava a conexão e a fechava. Embora eu fechasse a conexão toda vez, mas o sistema enfrentou muitas conexões e me deu esse erro. O que fiz foi definir minha variável de conexão como uma variável pública (ou privada) para toda a classe e inicializá-la no construtor. Então, toda vez que eu apenas usava essa conexão. Resolveu o meu problema e também aumentou drasticamente a minha velocidade.
Conclusão
Não há uma maneira simples e única de resolver esse problema. Eu sugiro que você pense sobre sua própria situação e escolha as soluções acima. Se você receber esse erro no início do programa e não conseguir se conectar ao banco de dados, poderá haver um problema na sua cadeia de conexão. Mas se você pegar esse erro após várias interações bem-sucedidas no banco de dados, o problema pode estar relacionado ao número de conexões e você pode pensar em alterar "wait_timeout" e outras configurações do MySQL ou reescrever seu código como isso reduz o número de conexões.