sql >> Database teknologi >  >> RDS >> Mysql

MySQL fjernforbindelse [ikke som normalt]

Genoptaget løsning:

Jeg dræbte mysqld'en, der holdt 3306-porten og genstartede den.

Jeg tror, ​​dette er en fejl eller noget relateret, tjek trin-for-trin, hvad jeg gjorde:

1- Oprettet et program til at oprette forbindelse på 3306

Først laver jeg et simpelt program i Java for at sikre, at der ikke var noget problem med min firewall. Programmet åbner bare en port på 3306 med TCP-forbindelse med 2 minutter kun for at teste, 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- Stoppede mysql-tjenesten

Før jeg kørte programmet, stoppede jeg mysql-tjenesten:

sudo service mysql stop

eller det kan gøres med:

/etc/init.d/mysql stop

3- Startede mit program med java PortMysqlTest

Mit program (PortMysqlTest) afgiver en undtagelse, der siger adressen/porten som allerede er i brug af mysqld!

Overraskelse? Så vidt jeg ved, med mysql-tjenesten stoppet, burde porten være fri. Har jeg ret? (Jeg er ikke sikker på, om nogen kan svare på dette...)

4- Jeg søgte efter applikationens PID, der brugte 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- Jeg slog processen ihjel med:

kill -9 6736

OBS, hvis du ikke ved, hvad kill do:6736 er den proces, der holdt porten, jeg fik dette nummer med trin 4, 6736/mysqld

6- Nu kører jeg mit program igen:

java PortMysqlTest og forbundet med telnet (telnet 66.123.173.170 3306) eksternt og det virkede !

Så problemet var ikke firewallen , fordi jeg kunne tilslutte eksternt til maskinen 66.123.173.170.

7- Startede mysql-tjenesten igen:

(Jeg ventede 2 minutter på, at mit program stoppede og frigør 3306-porten) og startede mysql-tjenesten igen for at teste med:

sudo service mysql start 

eller

sudo /etc/init.d/mysql start

8- Jeg oprettede forbindelse eksternt med telnet:

telnet 66.123.173.170 3306

og virkede!!!

Efter at jeg prøvede at oprette forbindelse til mysql med:

mysql -h 66.123.173.170 -u root -p 

og virkede!!!

Konklusion: Jeg tror, ​​der var en fejl med min MySql-installation; eller noget, (jeg ved ikke, hvad der er), når du genstarter mysql, får mysql ikke konfigurationen af:

bind-address = 0.0.0.0 

eller

bind-address = * 

Jeg håber, at dette hjælper en anden.



  1. PHP PDO hvordan kører man en anmodning om flere forespørgsler?

  2. LOAD DATA er ikke tilladt i lagrede procedurer

  3. De bedste ETL-værktøjer til migrering til PostgreSQL

  4. Fatal fejl:Kald til udefineret funktion mysqli_connect() i... mens PHP 5.4.22 og MySQL 5.5 forbindes med Apache 2.4.7