sql >> Database >  >> RDS >> Mysql

MySQL-verbinding op afstand [niet zoals gewoonlijk]

Hervatte oplossing:

Ik heb de mysqld die de 3306-poort bevatte uitgeschakeld en opnieuw opgestart.

Ik denk dat dit een bug of iets gerelateerd is, controleer stap voor stap wat ik heb gedaan:

1- Een programma gemaakt om verbinding te maken op 3306

Eerst maak ik een eenvoudig programma in Java om er zeker van te zijn dat er geen problemen zijn met mijn firewall. Het programma opent gewoon een poort op 3306 met een TCP-verbinding met 2 minuten alleen om te testen, het 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- De mysql-service gestopt

Voordat ik het programma uitvoerde heb ik de mysql-service gestopt:

sudo service mysql stop

of het kan worden gedaan met:

/etc/init.d/mysql stop

3- Mijn programma gestart met java PortMysqlTest

Mijn programma (PortMysqlTest) geeft een uitzondering door te zeggen dat het adres/de poort al in gebruik is door mysqld!

Verrassing? Voor zover ik weet is de met mysql-service gestopt, zou de poort vrij moeten zijn. Heb ik gelijk? (Ik weet niet zeker of iemand dit kan beantwoorden...)

4- Ik heb gezocht naar de applicatie-PID die het adres/de poort gebruikte met:

sudo netstat -lpn | grep 3306

het antwoord:

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

5- Ik heb het proces afgebroken met:

kill -9 6736

OBS, als je niet weet wat kill doet:6736 is het proces dat de poort vasthield, ik kreeg dit nummer met stap 4, 6736/mysqld

6- Nu voer ik mijn programma opnieuw uit:

java PortMysqlTest en verbonden met telnet (telnet 66.123.173.170 3306) extern en het werkte !

Dus het probleem was niet de firewall , omdat ik extern verbinding kon maken met de machine 66.123.173.170.

7- De mysql-service opnieuw gestart:

(Ik heb 2 minuten gewacht totdat mijn programma stopt en de 3306-poort vrijmaakt) en startte de mysql-service opnieuw om te testen, met:

sudo service mysql start 

of

sudo /etc/init.d/mysql start

8- Ik heb extern verbonden met telnet:

telnet 66.123.173.170 3306

en werkte!!!

Nadat ik probeerde verbinding te maken met mysql met:

mysql -h 66.123.173.170 -u root -p 

en werkte!!!

Conclusie: Ik denk dat er een fout was met mijn MySql-installatie; of zoiets, (ik weet niet wat het is), bij het herstarten van mysql krijgt de mysql niet de configuratie van:

bind-address = 0.0.0.0 

of

bind-address = * 

Ik hoop dat dit iemand anders helpt.



  1. Hoe vul ik een rationele MySQL-database met meerdere tabellen vanuit een bestaande database met één tabel?

  2. Wat is sneller:MySQL/PHP of rechtstreeks vanuit statische bestanden?

  3. Mysql:DB converteren van lokale tijd naar UTC

  4. Hoe kan ik MySQL-query's versnellen met meerdere joins?