sql >> Databasteknik >  >> RDS >> Mysql

MySQL fjärranslutning [inte som vanligt]

Återupptagen lösning:

Jag dödade mysqld som höll 3306-porten och startade om den.

Jag tror att det här är en bugg eller något relaterat kolla steg-för-steg vad jag gjorde:

1- Skapat ett program för att ansluta på 3306

Först skapar jag ett enkelt program i Java för att se till att det inte var några problem med min brandvägg. Programmet öppnar bara en port på 3306 med TCP-anslutning med 2 minuter bara för att testa, programmet:

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- Stoppade mysql-tjänsten

Innan jag körde programmet stoppade jag mysql-tjänsten:

sudo service mysql stop

eller det kan göras med:

/etc/init.d/mysql stop

3- Startade Mitt program med java PortMysqlTest

Mitt program (PortMysqlTest) ger ett undantag som säger adressen/porten som redan används av mysqld!

Överraskning? Såvitt jag vet bör med mysql-tjänsten stoppad porten vara gratis. Har jag rätt? (Jag är inte säker på om någon kan svara på detta...)

4- Jag sökte efter applikationens PID som använde adressen/porten med:

sudo netstat -lpn | grep 3306

svaret:

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

5- Jag avbröt processen med:

kill -9 6736

OBS, om du inte vet vad kill do:6736 är processen som höll porten, jag fick det här numret med steg 4, 6736/mysqld

6- Nu kör jag mitt program igen:

java PortMysqlTest och ansluten till telnet (telnet 66.123.173.170 3306) externt och det fungerade !

Så problemet var inte brandväggen , eftersom jag kunde ansluta externt till maskinen 66.123.173.170.

7- Startade mysql-tjänsten igen:

(Jag väntade 2 minuter på att mitt program skulle sluta och frigöra 3306-porten) och startade mysql-tjänsten igen för att testa, med:

sudo service mysql start 

eller

sudo /etc/init.d/mysql start

8- Jag ansluter externt med telnet:

telnet 66.123.173.170 3306

och fungerade!!!

Efter att jag försökte ansluta till mysql med:

mysql -h 66.123.173.170 -u root -p 

och fungerade!!!

Slutsats: Jag tror att det var en bugg med min MySql-installation; eller något, (jag vet inte vad det är), när jag startar om mysql får mysql inte konfigurationen av:

bind-address = 0.0.0.0 

eller

bind-address = * 

Jag hoppas att det här hjälper någon annan.



  1. Be dina användare att gå gaffeln själva

  2. Rader räknas utan distinkt

  3. Påskyndar användningen av LIMIT 1 en fråga på en primärnyckel?

  4. Vad är det bästa sättet att returnera enum-värden i MySQL?