Mysql
 sql >> Database >  >> RDS >> Mysql

Connessione remota MySQL [non come al solito]

Soluzione ripresa:

Ho ucciso il mysqld che conteneva la porta 3306 e l'ho riavviato.

Penso che questo sia un bug o qualcosa di correlato, controlla passo dopo passo quello che ho fatto:

1- Creato un programma per la connessione su 3306

Per prima cosa creo un semplice programma in Java per assicurarmi che non ci siano problemi con il mio firewall. Il programma ha appena aperto una porta su 3306 con connessione TCP di 2 minuti solo per il test, il programma:

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- Interrotto il servizio MySQL

Prima di eseguire il programma ho interrotto il servizio mysql:

sudo service mysql stop

oppure può essere fatto con:

/etc/init.d/mysql stop

3- Avviato il mio programma con java PortMysqlTest

Il mio programma (PortMysqlTest) genera un'eccezione dicendo che l'indirizzo/la porta è già in uso da mysqld!

Sorpresa? Per quanto ne so, il servizio con mysql interrotto, la porta dovrebbe essere gratuita. Ho ragione? (Non ne sono sicuro se qualcuno può rispondere a questo...)

4- Ho cercato il PID dell'applicazione che utilizzava l'indirizzo/la porta con:

sudo netstat -lpn | grep 3306

la risposta:

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

5- Ho terminato il processo con:

kill -9 6736

OBS, se non sai cosa fare kill:6736 è il processo che conteneva la porta, ho ottenuto questo numero con il passaggio 4, 6736/mysqld

6- Ora eseguo di nuovo il mio programma:

java PortMysqlTest e connesso con telnet (telnet 66.123.173.170 3306) esternamente e ha funzionato !

Quindi il problema non era il firewall , perché potrei collegarmi esternamente alla macchina 66.123.173.170.

7- Avviato di nuovo il servizio MySQL:

(Ho aspettato 2 minuti che il mio programma si fermasse e liberasse la porta 3306) e ho riavviato il servizio mysql per testare, con:

sudo service mysql start 

o

sudo /etc/init.d/mysql start

8- Mi sono connesso esternamente con telnet:

telnet 66.123.173.170 3306

e ha funzionato!!!

Dopo aver provato a connettermi a mysql con:

mysql -h 66.123.173.170 -u root -p 

e ha funzionato!!!

Conclusione: Penso che ci sia stato un bug con la mia installazione di MySql; o qualcosa del genere, (non so cosa sia), quando si riavvia mysql, mysql non ottiene la configurazione di:

bind-address = 0.0.0.0 

o

bind-address = * 

Spero che questo aiuti qualcun altro.