Javaプログラムをサーバーに接続しようとすると、次の例外が発生します。
CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
だから私はこれらの指示を見つけました:
SQLException:接続が拒否されたか、接続がタイムアウトしたか、MySQL固有のCommunicationsException:通信リンク障害が発生した場合は、DBにまったく到達できないことを意味します。これには、次の1つ以上の原因が考えられます。
- JDBCURLのIPアドレスまたはホスト名が間違っています。
- JDBC URLのホスト名は、ローカルDNSサーバーによって認識されません。
- JDBC URLにポート番号がないか、間違っています。
- DBサーバーがダウンしています。
- DBサーバーはTCP/IP接続を受け入れません。
- DBサーバーの接続が不足しています。
- JavaとDBの間の何かが、ファイアウォールやプロキシなどの接続をブロックしています。
どちらか一方を解決するには、次のアドバイスに従ってください。
- pingを使用してそれらを確認およびテストします。
- DNSを更新するか、代わりにJDBCURLのIPアドレスを使用してください。
- MySQLDBのmy.cnfに基づいて確認します。
- DBを起動します。
- --skip-networkingオプションを指定せずにmysqldが起動されているかどうかを確認します。
- DBを再起動し、それに応じてコードを修正して、最終的に接続を閉じます。
- ファイアウォールを無効にするか、ファイアウォール/プロキシを構成してポートを許可/転送します。
この回答から。
すべてのオプションを試しましたが、「my.ini」構成ファイルでポート番号(オプション3)を確認する方法がわかりません。さらに、services.mscリストに「MySQL」のサービスがないことがわかりましたが、ポート3306が使用されていることがわかりました。それは問題に関連していますか?そして、「my.ini」構成ファイルはどのように見えるべきですか?MySQLWorkbench5.2.47を使用しています。(MySQLサーバーのバージョンは5.6です)。
私の接続コード:
private MySQLConnectivity() {
try { Class.forName("com.mysql.jdbc.Driver"); Connect();
} catch (ClassNotFoundException e)
{ // TODO Auto-generated catch block e.printStackTrace(); }
}
public void Connect() { try { MySQLConnectivity.Conn = (Connection)DriverManager.getConnection(URL, USER, PASS);
} catch (SQLException e)
{ // TODO Auto-generated catch block e.printStackTrace();
} finally { }