Instalei uma instalação de estoque do mysql 5.5 e, embora possa me conectar ao serviço mysql por meio do comando mysql, e o serviço parece estar em execução, não consigo me conectar a ele por meio de spring + tomcat ou de um conector jdbc externo.
Estou usando a 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 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 que se eu tentar conectar externamente.
Isso pode acontecer por uma variedade de razões. Acabei de ver eu mesmo há algumas semanas, mas não consigo lembrar qual foi a correção para mim.
1) Verifique o endereço ao qual o mysql está vinculado, provavelmente é 127.0.0.1 (somente) que 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 a 127.0.0.1 e você não puder se conectar usando "localhost", certifique-se de que não está resolvendo para o endereço de host local IPv6 em vez de IPv4. (ou apenas use o endereço IP)
3) Verifique duas vezes e três vezes a porta em que o mysql está escutando.
4) Certifique-se de estar usando o conector JDBC correto para seu JDK.
5) Certifique-se de que você não está fazendo algo realmente bobo como iniciar o mysql com --skip-networking.
Eu acho que minha primeira sugestão é a mais promissora... na verdade eu acho que foi onde eu a vi recentemente... eu estava tentando me conectar remotamente ao mysql (também no Ubuntu 8.04).
Eu tive o mesmo problema em dois dos meus programas. Meu erro foi esse:
Eu passo alguns dias para resolver este problema. Eu testei muitas abordagens que foram mencionadas em diferentes sites, mas nenhuma delas funcionou. Finalmente mudei meu código e descobri qual era o problema. Vou tentar falar sobre diferentes abordagens e resumi-las aqui .
Enquanto eu procurava na internet a solução para esse erro, descobri que existem muitas soluções que funcionaram 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 por causa da string de consulta errada ou muitas conexões com o banco de dados.
Por isso, sugiro que tente todas as soluções uma a uma e não desista!
Aqui estão as soluções que encontrei na internet e para cada uma delas, existe pelo menos uma pessoa cujo problema foi resolvido com essa solução.
ponto: Para as soluções que você precisa para alterar as configurações do MySQL, você pode consultar o seguinte não:
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 "bind-address" 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" em 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
interativo_timeout = número
connect_timeout = número
Certifique-se de que o firewall ou softwares antivírus não bloqueiem o serviço MySQL.
Verifique sua string de consulta. sua string de conexão deve ser algo assim:
Certifique-se de não ter espaços em sua string. Toda a cadeia de conexão deve ser continua sem nenhum caractere de espaço.
Tente substituir "localhost" pela sua porta, como 127.0.0.1. Tente também adicionar o número da porta à sua string de conexão, como:
Normalmente, a porta padrão para MySQL é 3306.
Não se esqueça de alterar o 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.
altere TOMCAT6_SECURITY=sim para TOMCAT6_SECURITY=não
use validationQuery="select now()" para garantir que cada consulta tenha respostas
Adicione este código à sua string de conexão:
Embora nenhuma dessas soluções tenha funcionado para mim, sugiro que você as experimente. Porque existem algumas pessoas como resolveram seu problema seguindo estas etapas.
Mas o que resolveu meu problema? Meu problema era que eu tinha muitos SELECTs no banco de dados. Cada vez eu criava conexão e depois a fechava. Embora eu fechei a conexão todas as vezes, 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 usei essa conexão. Ele resolveu meu problema e também aumentou minha velocidade drasticamente.
Conclusão
Não existe 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, pode haver um problema em sua string de conexão. Mas se você receber esse erro após várias interações bem-sucedidas com o banco de dados, o problema pode estar no número de conexões e você pode pensar em alterar "wait_timeout" e outras configurações do MySQL ou reescrever seu código para reduzir o número de conexões.
Se você estiver executando uma instalação do Linux, provavelmente o lokkit está bloqueando as comunicações de entrada, exceto via SSH.
Faça 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 gravar nos locais corretos.
Há também este enorme bug na versão 5.1.9 do driver mysql-jdbc:
http://bugs.mysql.com/bug.php?id=47494
Isso também pode ser causado por configurações de proxy erradas . Eu tive esse problema ao tentar me conectar via jdbc a uma instância 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 um host não proxy (por exemplo, em um Mac você pode configurar isso em Configurações-> Rede-> Avançado- >Proxies e, finalmente, adicione o nome do host ou endereço IP em "Ignorar configurações de proxy para esses hosts e domínios").
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á desabilitada. Para que o Java não possa se comunicar com o MySQL.
eu tive um problema muito semelhante por quase um dia, e isso me deixou louco! mas eu consegui encontrar a solução, e foi muito, muito simples, você só precisa /etc/init.d/tomcat6 para alterar TOMCAT6_SECURITY=yes para TOMCAT6_SECURITY=no. não é minha solução, encontrei aqui , como você pode ver, estou executando o Ubuntu, espero que funcione.
Eu tive o mesmo problema. Alterada a propriedade "bind-address" no arquivo /etc/mysql/my.cnf para 0.0.0.0, e funciona. A linha correspondente em my.cnf se parece com isso:
endereço de ligação = 0.0.0.0
Antes de ser definido para 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 ouve as conexões do loop local.
tente seu endereço local para vincular o endereço no arquivo my.cnf
Conexão con = null;