AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 89955
Accepted
Stefan Kendall
Stefan Kendall
Asked: 2009-12-02 14:14:30 +0800 CST2009-12-02 14:14:30 +0800 CST 2009-12-02 14:14:30 +0800 CST

Não é possível conectar ao mysql através do conector JDBC através do Tomcat ou externamente

  • 772

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.

mysql
  • 9 9 respostas
  • 260805 Views

9 respostas

  • Voted
  1. Best Answer
    Boden
    2009-12-02T20:42:09+08:002009-12-02T20:42:09+08:00

    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).

    • 22
  2. Soheil
    2012-05-27T23:39:19+08:002012-05-27T23:39:19+08:00

    Eu tive o mesmo problema em dois dos meus programas. Meu erro foi esse:

    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.
    

    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:

    • alterando o atributo "bind-address"

    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"

    • comentando "skip-networking"

    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.

    • altere "wait_timeout" e "interactive_timeout"

    Adicione estas linhas ao arquivo de configuração do MySQL:

    wait_timeout = número

    interativo_timeout = número

    connect_timeout = número

    • verifique as configurações de proxy do sistema operacional

    Certifique-se de que o firewall ou softwares antivírus não bloqueiem o serviço MySQL.

    • alterar cadeia de conexão

    Verifique sua string de consulta. sua string de conexão deve ser algo assim:

    dbName = "my_database";
    dbUserName = "root";
    dbPassword = "";
    String connectionString = "jdbc:mysql://localhost/" + dbName + "?user=" + dbUserName + "&password=" + dbPassword + "&useUnicode=true&characterEncoding=UTF-8";
    

    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:

    String connectionString = "jdbc:mysql://localhost:3306/my_database?user=root&password=Pass&useUnicode=true&characterEncoding=UTF-8";
    

    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.

    • atualize seu arquivo de biblioteca de drivers JDK
    • teste diferentes JDK e JREs (como JDK 6 e 7)
    • não altere 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

    altere TOMCAT6_SECURITY=sim para TOMCAT6_SECURITY=não

    • use a propriedade validationQuery

    use validationQuery="select now()" para garantir que cada consulta tenha respostas

    • Reconexão automática

    Adicione este código à sua string de conexão:

    &autoReconnect=true&failOverReadOnly=false&maxReconnects=10
    

    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.

    • 15
  3. Stephen Thompson
    2009-12-02T14:16:58+08:002009-12-02T14:16:58+08:00

    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.

    • 1
  4. Mathieu
    2010-09-24T08:18:30+08:002010-09-24T08:18:30+08:00

    Há também este enorme bug na versão 5.1.9 do driver mysql-jdbc:

    http://bugs.mysql.com/bug.php?id=47494

    • 1
  5. Simone Bruno
    2011-01-27T05:14:49+08:002011-01-27T05:14:49+08:00

    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").

    • 1
  6. Sankar.lp.gym
    2012-09-14T04:43:52+08:002012-09-14T04:43:52+08:00

    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.

    • 1
  7. comanitza
    2010-03-16T12:26:44+08:002010-03-16T12:26:44+08:00

    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.

    • 0
  8. user56399
    2010-10-08T02:53:43+08:002010-10-08T02:53:43+08:00

    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.

    • 0
  9. ozgun bayrak
    2011-12-27T13:35:51+08:002011-12-27T13:35:51+08:00

    tente seu endereço local para vincular o endereço no arquivo my.cnf

    Conexão con = null;

        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://x62.xx8.x4x.x5:3306/mydb", "root", "root");
            try {
                System.out.println(con.getMetaData());
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    
    • 0

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Resolver o nome do host do endereço IP

    • 8 respostas
  • Marko Smith

    Como posso classificar a saída du -h por tamanho

    • 30 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    Qual é o utilitário de linha de comando no Windows para fazer uma pesquisa reversa de DNS?

    • 14 respostas
  • Marko Smith

    Como verificar se uma porta está bloqueada em uma máquina Windows?

    • 4 respostas
  • Marko Smith

    Qual porta devo abrir para permitir a área de trabalho remota?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    MikeN No Nginx, como posso reescrever todas as solicitações http para https mantendo o subdomínio? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 Qual é a diferença entre colchetes duplos e simples no bash? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch Como altero a senha da minha chave privada? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt Como funciona a sub-rede IPv4? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve