Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Remote-Verbindung [nicht wie üblich]

Fortgesetzte Lösung:

Ich habe den mysqld beendet, der den 3306-Port hatte, und ihn neu gestartet.

Ich denke, das ist ein Fehler oder etwas Ähnliches. Überprüfen Sie Schritt für Schritt, was ich getan habe:

1- Erstellen Sie ein Programm, um sich mit 3306 zu verbinden

Zuerst erstelle ich ein einfaches Programm in Java, um sicherzustellen, dass es keine Probleme mit meiner Firewall gibt. Das Programm öffnet einfach einen Port auf 3306 mit TCP-Verbindung um 2 Minuten nur zum Testen, das Programm:

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- Der MySQL-Dienst wurde gestoppt

Vor dem Ausführen des Programms habe ich den mysql-Dienst gestoppt:

sudo service mysql stop

oder es kann gemacht werden mit:

/etc/init.d/mysql stop

3- Mein Programm mit Java PortMysqlTest gestartet

Mein Programm (PortMysqlTest) löst eine Ausnahme aus, die besagt, dass die Adresse/der Port bereits von mysqld verwendet wird!

Überraschung? Soweit ich weiß, sollte der mit MySQL-Dienst gestoppte Port frei sein. Habe ich recht? (Ich bin mir nicht sicher, ob das jemand beantworten kann...)

4- Ich habe mit: nach der Anwendungs-PID gesucht, die die Adresse/den Port verwendet hat

sudo netstat -lpn | grep 3306

die Antwort:

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

5- Ich habe den Prozess beendet mit:

kill -9 6736

OBS, wenn Sie nicht wissen, was kill do:6736 ist der Prozess, der den Port gehalten hat, ich habe diese Nummer mit Schritt 4, 6736/mysqld

6- Jetzt führe ich mein Programm erneut aus:

java PortMysqlTest und mit Telnet (telnet 66.123.173.170 3306) extern verbunden und es funktionierte !

Das Problem war also nicht die Firewall , weil ich mich extern mit der Maschine 66.123.173.170 verbinden konnte.

7- MySQL-Dienst erneut gestartet:

(Ich habe 2 Minuten gewartet, bis mein Programm stoppt und den 3306-Port freigibt) und den MySQL-Dienst zum Testen erneut gestartet, mit:

sudo service mysql start 

oder

sudo /etc/init.d/mysql start

8- Ich habe mich extern mit Telnet verbunden:

telnet 66.123.173.170 3306

und funktioniert!!!

Nachdem ich versucht habe, eine Verbindung zu mysql herzustellen mit:

mysql -h 66.123.173.170 -u root -p 

und funktioniert!!!

Fazit: Ich glaube, es gab einen Fehler in meiner MySQL-Installation; oder so etwas (ich weiß nicht, was das ist), wenn MySQL neu gestartet wird, erhält MySQL nicht die Konfiguration von:

bind-address = 0.0.0.0 

oder

bind-address = * 

Ich hoffe, das hilft jemand anderem.