Instalei uma instalação padrão do mysql 5.5 e, embora possa conectar-me ao serviço mysql através do comando mysql, e o serviço parece estar em execução, não consigo conectar-me através do spring + tomcat ou de um conector jdbc externo.
Estou usando o seguinte URL:
jdbc:mysql://myserver.com:myport/mydb
com nome de usuário / senha adequados, mas recebo a seguinte mensagem:
server.com: 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.
e o tomcat lança:
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.
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
O que parece ser o mesmo problema, como se eu tentasse me conectar externamente.
Respostas:
Isso pode acontecer por vários motivos. Eu mesmo vi isso algumas semanas atrás, mas não me lembro qual era a correção para mim.
1) Verifique se o endereço ao qual o mysql está vinculado, provavelmente é 127.0.0.1 (somente), o que eu acredito ser o padrão (pelo menos no servidor Ubuntu padrão). Você terá que comentar o parâmetro bind-address em my.cnf para vincular a todos os endereços disponíveis (você não pode escolher vários, é um ou todos).
2) Se estiver vinculado ao 127.0.0.1 e você não conseguir se conectar usando "localhost", verifique se ele não está resolvendo para o endereço do host local IPv6 em vez do IPv4. (ou apenas use o endereço IP)
3) Verifique duas vezes e triplamente a porta em que o mysql está ouvindo.
4) Verifique se você está usando o conector JDBC correto para o seu JDK.
5) Verifique se você não está fazendo algo realmente bobo, como iniciar o mysql com --skip-networking.
Eu acho que minha primeira sugestão tem a maior promessa ... na verdade, acho que foi onde eu a vi recentemente ... Eu estava tentando conectar-se ao mysql remotamente (também no Ubuntu 8.04).
fonte
Eu tive o mesmo problema em dois dos meus programas. Meu erro foi este:
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:
Linux: /etc/my.cnf
Windows: D: \ Arquivos de Programas \ mysql \ bin \ my.ini
Aqui estão as soluções:
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.
Adicione estas linhas ao arquivo de configuração do MySQL:
wait_timeout = número
Interactive_timeout = número
connect_timeout = número
Verifique se os softwares Fire wall ou Anti virus não bloqueiam o serviço MySQL.
Verifique sua string de consulta. sua cadeia de conexão deve ser algo como isto:
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:
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.
" 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.
mude TOMCAT6_SECURITY = yes para TOMCAT6_SECURITY = no
use validationQuery = "select now ()" para garantir que cada consulta tenha respostas
Adicione este código à sua cadeia de conexão:
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.
fonte
Se você estiver executando uma instalação do Linux, provavelmente terá o lokkit bloqueando as comunicações recebidas, exceto via SSH.
Efetue login como root e execute o comando lokkit no prompt, desative o firewall e o SElinux e veja se você tem o mesmo problema.
Verifique também se suas permissões foram definidas corretamente, para que tudo possa ser gravado nos locais corretos.
fonte
Há também este erro enorme na versão 5.1.9 do driver mysql-jdbc:
http://bugs.mysql.com/bug.php?id=47494
fonte
Isso também pode ser causado por configurações de proxy incorretas . Eu tive esse problema ao tentar conectar via jdbc a uma instância do MySQL em execução em um dispositivo virtual Parallels no meu Mac. A conexão jdbc usa as configurações de rede no nível do sistema e, como eu estava atrás de um proxy SOCKS, tive que definir o host MySql como host não proxy (por exemplo, em um Mac, você pode configurá-lo em Configurações-> Rede-> Avançada- > Proxies e, finalmente, adicione o nome do host ou o endereço IP em "Ignorar as configurações de proxy para esses hosts e domínios").
fonte
O MySQL Connector / J suporta apenas TCP / IP Java não suporta conectividade de soquetes de domínio Unix
Se o MYSQL for iniciado com o sinalizador skip-networking ou se o MySQL estiver sendo executado atrás do firewall, a opção TCP / IP será desativada. Para que o Java não possa se comunicar com o MySQL.
fonte
Eu tive um problema muito parecido por quase um dia, e isso me deixou louco! mas eu consegui encontrar a solução, e era muito, muito simples, você só precisa /etc/init.d/tomcat6 para alterar TOMCAT6_SECURITY = yes para TOMCAT6_SECURITY = no. não é a minha solução, encontrei-a aqui , como podem ver, estou executando o ubuntu, espero que funcione.
fonte
Eu tive o mesmo problema. A propriedade "bind-address" foi alterada no arquivo /etc/mysql/my.cnf para 0.0.0.0 e funciona. A linha correspondente em my.cnf é assim:
endereço de ligação = 0.0.0.0
Antes de ser definido como o endereço IP externo do servidor, parecia algo como:
endereço de ligação = 196.152.4.145
Eu acho que quando está definido para o endereço IP externo e não para o loop localhost, o servidor mysql está apenas conectado à placa de rede e não escuta as conexões do loop local.
fonte
tente seu endereço local para vincular o endereço no arquivo my.cnf
Conexão con = nulo;
fonte