sql >> Base de Datos >  >> RDS >> Mysql

Conexión remota MySQL [no como de costumbre]

Solución reanudada:

Eliminé el mysqld que contenía el puerto 3306 y lo reinicié.

Creo que esto es un error o algo relacionado, verifique paso a paso lo que hice:

1- Creó un programa para conectarse en 3306

Primero creé un programa simple en Java para asegurarme de que no había ningún problema con mi firewall. El programa solo abre un puerto en 3306 con conexión TCP por 2 minutos solo para probar, el 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- Detenido el servicio mysql

Antes de ejecutar el programa detuve el servicio mysql:

sudo service mysql stop

o se puede hacer con:

/etc/init.d/mysql stop

3- Inicié mi programa con java PortMysqlTest

¡Mi programa (PortMysqlTest) lanza una excepción diciendo que mysqld ya está usando la dirección/puerto!

¿Sorpresa? Por lo que sé, con el servicio mysql detenido, el puerto debería estar libre. ¿Tengo razón? (No estoy seguro si alguien puede responder esto...)

4- Busqué el PID de la aplicación que estaba usando la dirección/puerto con:

sudo netstat -lpn | grep 3306

la respuesta:

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

5- Maté el proceso con:

kill -9 6736

OBS, si no sabe qué kill do:6736 es el proceso que estaba reteniendo el puerto, obtuve este número con el paso 4, 6736/mysqld

6- Ahora vuelvo a ejecutar mi programa:

java PortMysqlTest y conectado con telnet (telnet 66.123.173.170 3306) externamente y funcionó !

Así que el problema no era el cortafuegos , porque pude conectarme externamente a la máquina 66.123.173.170.

7- Inicié el servicio mysql nuevamente:

(Esperé 2 minutos para que mi programa se detuviera y liberara el puerto 3306) e inicié el servicio mysql nuevamente para probar, con:

sudo service mysql start 

o

sudo /etc/init.d/mysql start

8- Me conecté externamente con telnet:

telnet 66.123.173.170 3306

y funcionó!!!

Después de intentar conectarme a mysql con:

mysql -h 66.123.173.170 -u root -p 

y funcionó!!!

Conclusión: Creo que hubo un error con mi instalación de MySql; o algo así (no sé qué es), al reiniciar mysql, mysql no obtiene la configuración de:

bind-address = 0.0.0.0 

o

bind-address = * 

Espero que esto ayude a alguien más.