Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Kết nối từ xa MySQL [không như bình thường]

Giải pháp tiếp tục:

Tôi đã giết mysqld đang giữ cổng 3306 và khởi động lại nó.

Tôi nghĩ rằng đây là một lỗi hoặc một cái gì đó liên quan, hãy kiểm tra từng bước những gì tôi đã làm:

1- Đã tạo một chương trình để kết nối trên 3306

Đầu tiên, tôi tạo một chương trình đơn giản bằng Java để đảm bảo rằng không có bất kỳ sự cố nào với tường lửa của tôi. Chương trình chỉ mở một cổng trên 3306 với kết nối TCP trong 2 phút chỉ để thử nghiệm, chương trình:

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- Đã dừng dịch vụ mysql

Trước khi thực hiện chương trình, tôi đã dừng dịch vụ mysql:

sudo service mysql stop

hoặc nó có thể được thực hiện với:

/etc/init.d/mysql stop

3- Đã khởi động chương trình của tôi với java PortMysqlTest

Chương trình của tôi (PortMysqlTest) đưa ra một ngoại lệ cho biết địa chỉ / cổng như đã được mysqld sử dụng!

Bất ngờ? Theo như tôi biết thì dịch vụ with mysql đã dừng cổng nên miễn phí. Tôi nói đúng chứ? (Tôi không chắc về điều đó nếu ai đó có thể trả lời điều này ...)

4- Tôi đã tìm kiếm PID ứng dụng đang sử dụng địa chỉ / cổng với:

sudo netstat -lpn | grep 3306

câu trả lời:

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

5- Tôi đã giết quá trình với:

kill -9 6736

OBS, nếu bạn không biết kill làm gì:6736 là quá trình đang giữ cổng, tôi đã nhận được số này với bước 4, 6736 / mysqld

6- Bây giờ tôi chạy lại chương trình của mình:

java PortMysqlTest và được kết nối với telnet (telnet 66.123.173.170 3306) externaly và nó hoạt động !

Vì vậy, vấn đề không phải là tường lửa , vì tôi có thể kết nối bên ngoài với máy 66.123.173.170.

7- Bắt đầu lại dịch vụ mysql:

(Tôi đã đợi 2 phút để chương trình của mình dừng lại và giải phóng cổng 3306) và bắt đầu lại dịch vụ mysql để kiểm tra, với:

sudo service mysql start 

hoặc

sudo /etc/init.d/mysql start

8- Tôi đã kết nối bên ngoài với telnet:

telnet 66.123.173.170 3306

và đã hoạt động !!!

Sau khi tôi thử kết nối với mysql bằng:

mysql -h 66.123.173.170 -u root -p 

và đã hoạt động !!!

Kết luận: Tôi nghĩ rằng đã xảy ra lỗi với cài đặt MySql của mình; hoặc cái gì đó, (tôi không biết là gì), khi khởi động lại mysql, mysql không nhận được cấu hình của:

bind-address = 0.0.0.0 

hoặc

bind-address = * 

Tôi hy vọng điều này sẽ giúp người khác.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trích xuất tên tệp từ một đường dẫn MYSQL

  2. Spring-Boot, Không thể lưu chuỗi unicode trong MySql bằng Spring-data JPA

  3. GROUP_CONCAT () số hàng khi nhóm theo trường văn bản

  4. tập lệnh mẫu php để phân trang

  5. dòng lệnh mysql trả về thời gian thực hiện?