再開された解決策:
3306ポートを保持していたmysqldを強制終了し、再起動しました。
これはバグか、私が行ったことに関連するステップバイステップのチェックだと思います:
1-3306で接続するプログラムを作成しました
まず、ファイアウォールに問題がないことを確認するために、Javaで簡単なプログラムを作成します。プログラムは、テストのためだけに、TCP接続で3306のポートを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-javaPortMysqlTestを使用してプログラムを開始しました
私のプログラム(PortMysqlTest)は、mysqldですでに使用されているアドレス/ポートを示す例外をスローします!
サプライズ?私の知る限り、with 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 do:6736がポートを保持していたプロセスであるかどうかわからない場合は、ステップ4、6736 / mysqld
でこの番号を取得しました。6-プログラムを再度実行します:
java PortMysqlTestで、外部からtelnet(telnet 66.123.173.170 3306)に接続され、機能しました !
したがって、問題はファイアウォールではありませんでした 、マシン66.123.173.170に外部接続できたため。
7- mysqlサービスを再開しました:
(プログラムが停止して3306ポートを解放するのを2分間待ちました)そして、テストのために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 = *
これが他の誰かに役立つことを願っています。