Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Koneksi jarak jauh MySQL [tidak seperti biasanya]

Solusi dilanjutkan:

Saya mematikan mysqld yang menahan port 3306 dan memulai kembali.

Saya pikir ini adalah bug atau sesuatu yang terkait, periksa langkah demi langkah yang saya lakukan:

1- Membuat program untuk terhubung di 3306

Pertama saya membuat program sederhana di Java untuk memastikan tidak ada masalah dengan firewall saya. Program hanya membuka port pada 3306 dengan koneksi TCP selama 2 menit hanya untuk pengujian, 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- Menghentikan layanan mysql

Sebelum menjalankan program saya menghentikan layanan mysql:

sudo service mysql stop

atau bisa juga dengan:

/etc/init.d/mysql stop

3- Memulai program saya dengan java PortMysqlTest

Program saya (PortMysqlTest) mengeluarkan pengecualian yang mengatakan alamat/port sudah digunakan oleh mysqld!

Kejutan? Sejauh yang saya tahu dengan layanan mysql berhenti, port harus gratis. Apakah saya benar? (Saya tidak yakin apakah seseorang dapat menjawab ini...)

4- Saya mencari PID aplikasi yang menggunakan alamat/port dengan:

sudo netstat -lpn | grep 3306

jawabannya:

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

5- Saya menghentikan proses dengan:

kill -9 6736

OBS, jika Anda tidak tahu apa yang dilakukan kill:6736 adalah proses yang menahan port, saya mendapatkan nomor ini dengan langkah 4, 6736/mysqld

6- Sekarang saya menjalankan program saya lagi:

java PortMysqlTest dan terhubung dengan telnet (telnet 66.123.173.170 3306) eksternal dan berhasil !

Jadi masalahnya bukan firewallnya , karena saya dapat terhubung secara eksternal ke mesin 66.123.173.170.

7- Memulai layanan mysql lagi:

(Saya menunggu 2 menit hingga program saya berhenti dan membebaskan port 3306) dan memulai layanan mysql lagi untuk menguji, dengan:

sudo service mysql start 

atau

sudo /etc/init.d/mysql start

8- Saya memang terhubung secara eksternal dengan telnet:

telnet 66.123.173.170 3306

dan berhasil!!!

Setelah saya mencoba terhubung ke mysql dengan:

mysql -h 66.123.173.170 -u root -p 

dan berhasil!!!

Kesimpulan: Saya pikir ada bug dengan instalasi MySql saya; atau sesuatu, (saya tidak tahu apa itu), ketika me-restart mysql mysql tidak mendapatkan konfigurasi:

bind-address = 0.0.0.0 

atau

bind-address = * 

Saya harap ini membantu orang lain.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MAX() – Temukan Nilai Maksimum dalam Kolom di MySQL

  2. Praktik penyatuan koneksi JDBC MySql untuk menghindari kumpulan koneksi yang habis

  3. cara mengembalikan pilih mysql sebagai array array di json menggunakan php

  4. MySql tidak dapat memperbarui baris induk ketika saya memiliki ON UPDATE CASCADE

  5. Perintah Administrasi Basis Data Dasar MySQL – Bagian I