sql >> Databáze >  >> RDS >> Mysql

Vzdálené připojení MySQL [ne jako obvykle]

Obnovené řešení:

Zabil jsem mysqld, který držel port 3306, a restartoval jsem ho.

Myslím, že se jedná o chybu nebo něco souvisejícího, zkontrolujte krok za krokem, co jsem udělal:

1- Vytvořil program pro připojení k 3306

Nejprve vytvořím jednoduchý program v Javě, abych se ujistil, že nemám problém s mým firewallem. Program jen otevře port na 3306 s připojením TCP o 2 minuty jen pro testování, program:

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- Zastavena služba mysql

Před spuštěním programu jsem zastavil službu mysql:

sudo service mysql stop

nebo to lze provést pomocí:

/etc/init.d/mysql stop

3- Program byl spuštěn pomocí java PortMysqlTest

Můj program (PortMysqlTest) vyvolá výjimku, která říká, že adresa/port je již používán mysqld!

Překvapení? Pokud vím, při zastavení služby mysql by měl být port volný. Mám pravdu? (Nejsem si jistý, jestli na to někdo dokáže odpovědět...)

4- Hledal jsem PID aplikace, která používala adresu/port s:

sudo netstat -lpn | grep 3306

odpověď:

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

5- Proces jsem ukončil pomocí:

kill -9 6736

OBS, pokud nevíte, co dělat kill:6736 je proces, který držel port, toto číslo jsem získal v kroku 4, 6736/mysqld

6- Nyní znovu spustím svůj program:

java PortMysqlTest a připojen k telnetu (telnet 66.123.173.170 3306) externě a fungovalo to !

Problémem tedy nebyl firewall , protože jsem se mohl externě připojit ke stroji 66.123.173.170.

7- Znovu byla spuštěna služba mysql:

(Počkal jsem 2 minuty, než se můj program zastaví a uvolní port 3306) a znovu spustil službu mysql, abych otestoval:

sudo service mysql start 

nebo

sudo /etc/init.d/mysql start

8- Připojil jsem se externě pomocí telnetu:

telnet 66.123.173.170 3306

a fungovalo!!!

Poté, co jsem se pokusil připojit k mysql pomocí:

mysql -h 66.123.173.170 -u root -p 

a fungovalo!!!

Závěr: Myslím, že se vyskytla chyba v mé instalaci MySql; nebo tak něco (nevím, co to je), při restartování mysql mysql nezíská konfiguraci:

bind-address = 0.0.0.0 

nebo

bind-address = * 

Doufám, že to pomůže někomu dalšímu.



  1. Jak používat příkaz Zkomprimovat a opravit v Accessu

  2. Více spojení v tabulce MySQL

  3. mysql:jak zkrátit délku pole

  4. Nainstalujte MySQL na Mac