MySQL - De repente "Communications falha de ligação" entre o recipiente janela de encaixe e MySQL

L. Don:

Eu estou trabalhando em um aplicativo Docker que usa MySQL para armazenar grandes bancos de dados (que é devido a razões de legado). Este é instalado na máquina host.

Hoje eu estava fazendo trabalhos comuns que eu tenho feito para 1 ou 2 meses, e de repente eu não pode se comunicar mais com o meu banco de dados.

O uri do db tem sido a mesma há meses:jdbc:mysql://localhost:3306/dbname?verifyServerCertificate=false&useSSL=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC

Assim que eu tento conectar ao banco de dados do meu aplicativo que é executado no Virtual Machine recebo:

java.sql.SQLException: Cannot create PoolableConnectionFactory (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.)
...
Caused by: java.net.ConnectException: Connection timed out

O código culpado é o seguinte:

private static boolean checkForExistence(String dbName) {
    boolean exists = false;
    BasicDataSource dataSource = new BasicDataSource();

    dataSource.setDriverClassName(JDBC_DRIVER); //com.mysql.cj.jdbc.Driver
    dataSource.setUrl(this.url); //that's the uri provided before
    dataSource.setUsername(USER);
    dataSource.setPassword(PASS);

    Connection conn = null;
    Statement stmnt = null;
    ResultSet dbs = null;
    try {       
        conn = dataSource.getConnection(); //And this is the line that triggers the exception.
        System.out.println(conn!=null);
        dbs = conn.getMetaData().getCatalogs();

        while(dbs.next() && !exists)
            if(dbs.getString(1).equals(dbName))
                exists = true;

    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        try {
            if(conn != null)
                conn.close();
            if(stmnt != null)
                stmnt.close();
            if(dbs != null)
                dbs.close();
            if(dataSource != null)
                dataSource.close();
        } catch (SQLException e) {
                logger.error(e.getMessage());
                return exists;
        }
    }

    return exists;
}

Eu tentei as seguintes coisas:

  • Da minha máquina local: telnet <public ip of the VM> 3306-> Conexão expirou
  • Da minha máquina local: mysql -h<public ip of the VM> -u user -p->ERROR 2003 (HY000): Can't connect to MySQL server on 'remoteHostname.com' (110)
  • De dentro da VM: nc localhost 3306-> posso entrar.
  • De dentro da VM: mysql -h127.0.0.1 -u user -p-> posso entrar.
  • De dentro da VM: mysql -h<public ip address> -u user -p-> posso entrar.

Se eu corro netstat -tulpn | grep 3306eu tenho:

tcp6       0      0 :::3306                 :::*                    LISTEN      -                   
tcp6       0      0 :::33060                :::*                    LISTEN      -  

Isto é my.cnf:

[mysqld]
default_authentication_plugin=mysql_native_password
datadir=/local/user/mysql
socket=/var/lib/mysql/mysql.sock
general_log_file=/var/log/mysql.log
general_log=1
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

I podem se conectar ao db através phpMyAdmin , mas acho que isso é devido ao fato de que está usando uma conexão Socket.

Se eu verificar tanto /var/log/mysql.loge /var/log/mysqld.log(esta é a única sobre os erros) não há nenhuma evidência de qualquer coisa. Basicamente, quando eu tento conectar aqueles não exibe nada.

EDIT: Se eu usar as mesmas configurações para conectar ao meu exemplo máquina local de tudo mysql fina funciona. Então, isso pode estar relacionado com uma rede problema? Ou instane de mysql do VM doe não aceitar conexão mais tcp por algum motivo?

RE-EDIT : Verificação dentro /var/log/messageseu descobri que a máquina host saiu do espaço em disco. A partir desse momento, a interface docker0foi em uma blocked statee depois disabled stateloop.

Configuração:

  • VM remoto com RHEL7
  • 32 núcleos de CPU
  • 64GB RAM
  • MySQL 8.0.13 - MySQL Community Server - GPL
  • O phpMyAdmin 4.8.4
L. Don:

Na seção Re-edição de questão i especificado novos detalhes. Eu não posso ainda executar o aplicativo corretamente com a configuração antiga, mas usando --network=hostparâmetro docker runfez o truque.

Isso é simplesmente uma solução alternativa. Vou atualizar essa questão com mais informações.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=220008&siteId=1
Recomendado
Clasificación