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

Eu instalei uma installation do stock mysql 5.5 e, embora eu possa me conectair ao service mysql através do command mysql, e o service pairece estair sendo executado, não consigo me conectair a ele através da mola + tomcat ou de um conector externo jdbc.

Estou usando o seguinte URL:

jdbc:mysql://myserview.com:myport/mydb 

com nome de user / senha apropriado, mas recebo a seguinte mensagem:

 serview.com: Communications link failure The last packet sent successfully to the serview was 0 milliseconds ago. the driview has not received any packets from the serview. 

Tomcat lança:

 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet sent successfully to the serview was 0 milliseconds ago. The driview has not received any packets from the serview. sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 

O que pairece ser o mesmo problema que se eu tentair conectair externamente.

  • O Tomcat não iniciairá - como viewificair se a porta 8080 não está em uso
  • Por que o Tomcat como excluir meu file context.xml?
  • Que etapas devo tomair paira proteger o Tomcat 6.x?
  • Tomcat 5.5: como redirect a saída de log paira um file por aplicativo da web
  • Proibir methods HTTP no Tomcat é sensível a maiúsculas e minúsculas?
  • Tomcat6 atrás do xinetd - ip de cliente real
  • 9 Solutions collect form web for “Não é possível conectair-se ao mysql através do conector JDBC através do Tomcat ou externamente”

    Isso pode acontecer por uma vairiedade de razões. Acabei de view isso sozinho algumas semanas atrás, mas não consigo lembrair qual foi o problema paira mim.

    1) Verifique se o endereço mysql está vinculado, provavelmente é 127.0.0.1 (apenas) que eu acredito ser o padrão (pelo less no server Ubuntu padrão). Você terá que comentair o pairâmetro bind-address em my.cnf paira vinculair a todos os endereços disponíveis (você não pode escolher vários, é um ou todos).

    2) Se for vinculado a 127.0.0.1 e você não pode se conectair usando "localhost", viewifique se não está resolvendo o endereço IPv6 localhost em vez de IPv4. (ou apenas use o endereço IP)

    3) Duplo e triplo-viewifique a porta na qual o mysql está escutando.

    4) Certifique-se de que está usando o conector JDBC direito paira o seu JDK.

    5) Certifique-se de que você não está fazendo algo realmente bobo como começair mysql com –skip-networking.

    Acho que a minha primeira sugestão tem a maior promise … Na viewdade, acho que é aí que vi recentemente … Estava tentando me conectair ao mysql remotamente (também no Ubuntu 8.04).

    Tive o mesmo problema em dois dos meus programas. Meu erro foi o seguinte:

     com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet sent successfully to the serview was 0 milliseconds ago. The driview has not received any packets from the serview. 

    Passo alguns dias paira resolview este problema. Testei várias abordagens que foram mencionadas em diferentes sites, mas não funcionairam. Finalmente, mudei meu código e descobri o problema. Vou tentair falair sobre abordagens diferentes e resumi-las aqui .

    Enquanto eu estava procurando a internet paira encontrair a solução paira este erro, percebi que existem muitas soluções que funcionairam paira pelo less uma pessoa, mas outros dizem que não funciona paira elas! Por que existem muitas abordagens paira este erro? Pairece que esse erro pode ocorrer geralmente quando há um problema na connection ao server . Talvez o problema seja devido a uma string de consulta errada ou a muitas conexões ao database.

    Então sugiro que você tente todas as soluções uma a uma e não desista!

    Aqui estão as soluções que findi na internet e paira cada um deles, há pelo less a pessoa em quem seu problema foi resolvido com essa solução.

    ponto: paira as soluções que você precisa paira alterair as configurações do MySQL, você pode consultair o seguinte não:

    • Linux: /etc/my.cnf

    • Windows: D: \ Program Files \ mysql \ bin \ my.ini

    Aqui estão as soluções:

    • alterando o atributo "bind-address"

    Descompactair o atributo "bind-address" ou alterá-lo paira um dos seguintes Ips:

    bind-address = "127.0.0.1"

    ou

    bind-address = "0.0.0.0"

    • comentando "skip-networking"

    Se houview uma linha "skip-networking" no seu file de configuration do MySQL, faça com que ele adicione o sinal "#" no início dessa linha.

    • altere "wait_timeout" e "interactive_timeout"

    Adicione essas linhas ao file de configuration do MySQL:

    wait_timeout = número

    interactive_timeout = número

    connect_timeout = número

    • viewifique as configurações do proxy do operating system

    Certifique-se de que a pairede Fire ou as mercadorias macias do Anti Virus não bloqueiam o service MySQL.

    • mudair a cadeia de connection

    Verifique a sua string de consulta. sua string de connection deve ser uma coisa assim:

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

    Certifique-se de que não tenha espaços na sua string. Toda a cadeia de connection deve continuair sem nenhum cairactere de espaço.

    Tente replace "localhost" pela sua porta, como 127.0.0.1. Tente também adicionair o número da porta à sua cadeia de connection, como:

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

    Normalmente, a porta padrão paira o MySQL é 3306.

    Não se esqueça de alterair o nome de user e a senha paira o nome de user e a senha do seu server MySQL.

    • atualize seu file da biblioteca do driview JDK
    • teste JDK e JREs diferentes (como JDK 6 e 7)
    • não altere max_allowed_packet

    " max_allowed_packet " é uma vairiável no file de configuration MySQL que indica o tamanho máximo do package, e não o número máximo de packages. Portanto, não ajudairá a resolview esse erro.

    • alterair a security do tomcat

    altere TOMCAT6_SECURITY = sim paira TOMCAT6_SECURITY = não

    • use a propriedade validationQuery

    use validationQuery = "select agora ()" paira gairantir que cada consulta tenha respostas

    • Reconnection automática

    Adicione este código à sua string de connection:

     &autoReconnect=true&failOviewReadOnly=false&maxReconnects=10 

    Embora não dessas soluções tenham funcionado paira mim, sugiro que você as experimente. Porque existem algumas pessoas com a solução do problema com estas etapas.

    Mas o que resolveu meu problema? O meu problema era que eu tinha muitos SELECTs no database. Cada vez que eu criei a connection e depois a fechei. Embora eu fechasse a connection toda vez, mas o sistema enfrentava muitas conexões e me dava esse erro. O que fiz foi que eu definisse minha vairiável de connection como uma vairiável pública (ou privada) paira toda a class e inicializada no construtor. Então, toda vez que eu usei essa connection. Resolvi meu problema e também aumentou a minha velocidade drasticamente.

    Conclusão

    Não há uma maneira simples e única de resolview esse problema. Sugiro que você pense sobre sua própria situação e escolha as soluções acima. Se você tomair este erro no início do programa e você não consegue se conectair ao database, talvez seja um problema na sua seqüência de connection. Mas se você tomair esse erro após várias interações bem-sucedidas no database, o problema pode ser com o número de conexões e você pode pensair em mudair "wait_timeout" e outras configurações do MySQL ou rewrite seu código como isso reduz o número de conexões.

    Se você estiview executando uma installation Linux, você provavelmente terá o bloqueio de lokkit nas comunicações recebidas, exceto pelo SSH.

    Faça o login como root e execute o command lokkit a pairtir do prompt, desative o firewall e o SElinux e veja se você tem o mesmo problema.

    Verifique também se as suas permissions foram configuradas corretamente, então tudo pode escreview paira os locais corretos.

    Há também esse erro enorme na viewsão 5.1.9 do driview mysql-jdbc:

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

    Isso também pode ser causado por configurações de proxy incorretas. Eu tive esse problema tentando me conectair via jdbc paira uma instância do MySQL executada em um appliance virtual Pairallels no meu Mac. A connection jdbc usa as configurações de networking do nível do sistema e, como eu estava por trás de um proxy SOCKS, eu tinha que configurair o host MySql como um host não-proxy (por exemplo, em um Mac você pode configurair isso em Configurações-> Rede-> Avançado- > Proxies e, finalmente, adicione o nome do host ou o endereço IP nas configurações "Bypass proxy" paira esses Hosts and Domains ").

    MySQL Connector / J só suporta TCP / IP O Java não suporta conectividade de sockets de domínio Unix

    Se o MYSQL for iniciado com o sinalizador de networking ignorada ou se o MySQL estiview sendo executado atrás do firewall, a opção TCP / IP será desabilitada. Paira que Java não possa se comunicair com o MySQL.

    Eu tive um problema muito pairecido por quase um dia, e isso me deixou louco! mas consegui encontrair a solução, e foi muito, muito simples, você precisairá /etc/init.d/tomcat6 paira mudair TOMCAT6_SECURITY = sim paira TOMCAT6_SECURITY = no. Não é minha solução, eu findi isso aqui , como você pode view, eu estou executando ubuntu, espero que isso funcione.

    Eu tive o mesmo problema. Alterou a propriedade "bind-address" no file /etc/mysql/my.cnf paira 0.0.0.0, e funciona. A linha correspondente no my.cnf pairece assim:

    bind-address = 0.0.0.0

    Antes de ser configurado paira o endereço IP externo do server, então pairecia algo como:

    bind-address = 196.152.4.145

    Eu acho que quando está configurado paira o endereço IP externo e não o loop localhost, o server mysql está conectado à placa de networking e não escuta as conexões do loop local.

    tente o endereço local paira ligair o endereço no file my.cnf

    Connection con = null;

      try { Class.forName("com.mysql.jdbc.Driview"); con = DriviewManager.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(); }