Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Conexão remota MySQL [não como de costume]


Solução retomada:

Eu matei o mysqld que estava segurando a porta 3306 e reiniciei.

Acho que isso é um bug ou algo relacionado verifique passo a passo o que fiz:

1- Criou um programa para conectar em 3306

Primeiro eu crio um programa simples em Java para ter certeza de que não houve nenhum problema com meu firewall. O programa acabou de abrir uma porta no 3306 com conexão TCP por 2 minutos apenas para teste, o programa:
import java.io.IOException;
import java.net.ServerSocket;

public class PortMysqlTest {
    public static void main(String[] args) {
        int port = 3306;

        ServerSocket ss = null;
        try
        {
            ss = new ServerSocket(port);
            ss.setReuseAddress(true);
        }
        catch (IOException e)
        {
            System.out.println(e.getMessage());
        }

        long futureTime = System.currentTimeMillis() + 1000 * 60 * 2;
        while (System.currentTimeMillis() < futureTime)
        {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        if (ss != null)
        {
            try
            {
                ss.close();
            }
            catch (IOException e)
            {
                System.out.println(e.getMessage());
            }
        }       
    }

2- Parou o serviço mysql

Antes de executar o programa eu parei o serviço mysql:
sudo service mysql stop

ou pode ser feito com:
/etc/init.d/mysql stop

3- Iniciei meu programa com java PortMysqlTest

Meu programa (PortMysqlTest) lança uma exceção dizendo que o endereço/porta já está em uso pelo mysqld!

Surpresa? Até onde eu sei, com o serviço mysql parado, a porta deve estar livre. Estou certo? (não tenho certeza se alguém pode responder isso...)

4- Procurei o PID do aplicativo que estava usando o endereço/porta com:
sudo netstat -lpn | grep 3306

a resposta:
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      6736/mysqld

5- Matei o processo com:
kill -9 6736

OBS, se você não sabe o que kill faz:6736 é o processo que estava segurando a porta, peguei esse número com o passo 4, 6736/mysqld

6- Agora executo meu programa novamente:

java PortMysqlTest e conectado com telnet (telnet 66.123.173.170 3306) externamente e funcionou !

Então o problema não era o firewall , pois consegui conectar externamente à máquina 66.123.173.170.

7- Iniciou o serviço mysql novamente:

(esperei 2 minutos para meu programa parar e liberar a porta 3306) e iniciei o serviço mysql novamente para testar, com:
sudo service mysql start 

ou
sudo /etc/init.d/mysql start

8- Conectei-me externamente com telnet:
telnet 66.123.173.170 3306

e funcionou!!!

Depois que tentei me conectar ao mysql com:
mysql -h 66.123.173.170 -u root -p 

e funcionou!!!

Conclusão: Acho que houve um bug com minha instalação do MySql;ou algo assim, (não sei o que é), ao reiniciar o mysql o mysql não recebe a configuração de:
bind-address = 0.0.0.0 

ou
bind-address = * 

Espero que isso ajude mais alguém.