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.