Mysql
 sql >> Base de données >  >> RDS >> Mysql

Connexion à distance MySQL [pas comme d'habitude]

Solution reprise :

J'ai tué le mysqld qui contenait le port 3306 et je l'ai redémarré.

Je pense qu'il s'agit d'un bogue ou de quelque chose de lié, vérifiez étape par étape ce que j'ai fait :

1- Création d'un programme pour se connecter sur le 3306

J'ai d'abord créé un programme simple en Java pour m'assurer qu'il n'y avait aucun problème avec mon pare-feu. Le programme vient d'ouvrir un port sur 3306 avec connexion TCP en 2 minutes juste pour tester, le programme :

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- Arrêt du service mysql

Avant d'exécuter le programme, j'ai arrêté le service mysql :

sudo service mysql stop

ou cela peut être fait avec :

/etc/init.d/mysql stop

3- J'ai démarré mon programme avec java PortMysqlTest

Mon programme (PortMysqlTest) lance une exception indiquant que l'adresse/le port est déjà utilisé par mysqld !

Surprendre? Autant que je sache, le service with mysql s'est arrêté, le port devrait être libre. Ai-je raison? (Je ne sais pas si quelqu'un peut y répondre...)

4- J'ai recherché le PID de l'application qui utilisait l'adresse/le port avec :

sudo netstat -lpn | grep 3306

la réponse :

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

5- J'ai tué le processus avec :

kill -9 6736

OBS, si vous ne savez pas ce que kill fait :6736 est le processus qui maintenait le port, j'ai obtenu ce numéro à l'étape 4, 6736/mysqld

6- Maintenant, je relance mon programme :

java PortMysqlTest et connecté avec telnet (telnet 66.123.173.170 3306) externe et ça a fonctionné !

Donc le problème n'était pas le pare-feu , car je pouvais me connecter en externe à la machine 66.123.173.170.

7- Redémarré le service mysql :

(J'ai attendu 2 minutes que mon programme s'arrête et libère le port 3306) et ai redémarré le service mysql pour tester, avec :

sudo service mysql start 

ou

sudo /etc/init.d/mysql start

8- Je me suis connecté en externe avec telnet :

telnet 66.123.173.170 3306

et travaillé !!!

Après avoir essayé de me connecter à mysql avec :

mysql -h 66.123.173.170 -u root -p 

et travaillé !!!

Conclusion : Je pense qu'il y a eu un bogue avec mon installation MySql ; ou quelque chose (je ne sais pas ce que c'est), lors du redémarrage de mysql, mysql n'obtient pas la configuration de :

bind-address = 0.0.0.0 

ou

bind-address = * 

J'espère que cela aidera quelqu'un d'autre.