Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL отдалечена връзка [не както обикновено]

Възобновено решение:

Убих mysqld, който държеше порта 3306 и го рестартирах.

Мисля, че това е грешка или нещо свързано, проверете стъпка по стъпка какво направих:

1- Създадена програма за свързване на 3306

Първо създавам проста програма на Java, за да се уверя, че няма проблем с моята защитна стена. Програмата просто отваря порт на 3306 с TCP връзка с 2 минути само за тестване, програмата:

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- Спира услугата mysql

Преди да изпълня програмата, спрях услугата mysql:

sudo service mysql stop

или може да се направи с:

/etc/init.d/mysql stop

3- Стартирах моята програма с java PortMysqlTest

Моята програма (PortMysqlTest) хвърля изключение, което казва, че адресът/портът вече се използва от mysqld!

Изненада? Доколкото знам портът със спряна услуга mysql трябва да е безплатен. Прав ли съм? (Не съм сигурен дали някой може да отговори на това...)

4- Потърсих PID на приложението, което използва адреса/порта с:

sudo netstat -lpn | grep 3306

отговорът:

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

5- Убих процеса с:

kill -9 6736

OBS, ако не знаете какво прави kill:6736 е процесът, който задържа порта, получих този номер със стъпка 4, 6736/mysqld

6- Сега стартирам програмата си отново:

java PortMysqlTest и свързан с telnet (telnet 66.123.173.170 3306) външен иработи !

Така че проблемът не беше в защитната стена , защото можех да се свържа външно към машината 66.123.173.170.

7- Стартира отново услугата mysql:

(Изчаках 2 минути моята програма да спре и освободи порта 3306) и стартирах отново услугата mysql, за да тествам, с:

sudo service mysql start 

или

sudo /etc/init.d/mysql start

8- Свързах се външно с telnet:

telnet 66.123.173.170 3306

и работи!!!

След като се опитах да се свържа с mysql с:

mysql -h 66.123.173.170 -u root -p 

и работи!!!

Заключение: Мисля, че имаше грешка с моята инсталация на MySql; или нещо подобно (не знам какво е), при рестартиране на mysql mysql не получава конфигурацията на:

bind-address = 0.0.0.0 

или

bind-address = * 

Надявам се това да помогне на някой друг.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysqldump с ред за създаване на база данни

  2. Преименувайте колона в таблицата на mysql, без да се налага да повтаряте нейната дефиниция на типа

  3. SQL за създаване на матрична таблица

  4. Работа с MySQL TIMESTAMP колони в SQL Server

  5. MySql:Заявка за множество идентични динамични таблици