[java] JDBCとMySQLとの「通信リンク障害」の解決


Answers

あなたがMAMP PROを使用している場合は、これを理解しようとしている日々のインターネット検索を開始する前に、私が本当に望んでいた簡単な修正があります。 その本当にこのシンプルな...

MAMPの[MySQL]タブから[MySQLへのネットワークアクセスを許可する]をクリックするだけで済みます。

本当に、それはそれです。

ああ、あなたはまだ上記の投稿に記載されているようにあなたのバインドアドレスを0.0.0.0または127.0.0.1に変更する必要がありますが、MAMPユーザーの場合は、そのボックスだけをクリックするだけで問題が解決する可能性があります。

Question

この質問には既に回答があります:

私はローカルのMySQLサーバーに接続しようとしていますが、エラーが発生し続けます。

ここにコードがあります。

public class Connect {

    public static void main(String[] args) {
        Connection conn = null;

        try {
            String userName = "myUsername";
            String password = "myPassword";

            String url = "jdbc:mysql://localhost:3306/myDatabaseName";
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            conn = DriverManager.getConnection(url, userName, password);
            System.out.println("Database connection established");
        } catch (Exception e) {
            System.err.println("Cannot connect to database server");
            System.err.println(e.getMessage());
            e.printStackTrace();
        } finally {
            if (conn != null) {
                try {
                    conn.close();
                    System.out.println("Database Connection Terminated");
                } catch (Exception e) {}
            }
        }
    }
}

とエラー:

Cannot connect to database server
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.
com.mysql.jdbc.exceptions.jdbc4.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.
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
        at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
        at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
        at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2333)
        at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2370)
        at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2154)
        at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
        at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
        at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381)
        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
        at java.sql.DriverManager.getConnection(DriverManager.java:582)
        at java.sql.DriverManager.getConnection(DriverManager.java:185)
        at Connect.main(Connect.java:16)
    Caused by: java.net.ConnectException: Connection refused
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
        at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
        at java.net.Socket.connect(Socket.java:529)
        at java.net.Socket.connect(Socket.java:478)
        at java.net.Socket.<init>(Socket.java:375)
        at java.net.Socket.<init>(Socket.java:218)
        at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:257)
        at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:294)
        ... 15 more

クラスパスを設定し、my.cnfがスキップネットワークオプションをコメントアウトしていることを確認しました。

javaバージョンは1.2.0_26(64ビット)です。mysql 5.5.14 mysql connector 5.1.17

ユーザーが自分のデータベースにアクセスできることを確認しました。




上記の詳細な答えによると、このエラーは多くのことによって引き起こされる可能性があります。

私もこの問題を抱えていた。 私のセットアップはMac OSX 10.8で、Ubuntu 12.04のVagrant管理VirtualBox VMとMySQL 5.5.34を使用していました。

私はVagrant設定ファイルでポート転送を正しく設定しました。 私は、MacとVMの両方からMySQLインスタンスにtelnetで接続できます。 だから私は、MySQLデーモンが実行中で到達可能であることを知っていました。 しかし、私はJDBCを介して接続しようとすると、私は "通信リンクの失敗"エラーが発生しました。

私の場合、この問題は/etc/mysql/my.cnfファイルを編集することで解決しました。 特に、私は "#bind-address = 127.0.0.1"行をコメントアウトしました。




私は解決策を見つけた

動作するためにMySQLがローカルホストを必要とするからです。

/ etc / network / interfacesファイルに移動し、そこにlocalhost設定があることを確認してください:

auto lo
iface lo inet loopback

今すぐネットワークサブシステムとMySQLサービスを再起動します:

sudo /etc/init.d/networking restart

sudo /etc/init.d/mysql restart

やってみよう




Windowsの場合 - スタートメニューの「MySqlServer Instance Configuration Wizard」に移動し、mysqlサーバインスタンスを再設定します。 あなたの問題を解決することを願っています。




私はこれが古いスレッドだと知っていますが、私は数多くのことを試して、次の手段で問題を解決しました。

私はWindows上でクロスプラットフォームアプリケーションを開発していますが、LinuxおよびWindowsサーバーで使用することができます。

両方のシステムにインストールされた "jtm"というMySQLデータベース。 何らかの理由で、私のコードでは、私は "JTM"としてデータベース名を持っていました。 Windows上ではうまくいきました。実際には、いくつかのWindowsシステム上で動作しました。

Ubuntuでは、私は時と時間の上で再びエラーを受けました。 私はコード "jtm"の正しい例でテストしました。

Linuxでは明らかに大文字と小文字の区別についてはあまり容認されませんが(正しくはそうです)、Windowsでは手当があります。

私はちょっと気が気になるが、すべてをチェックする。 エラーメッセージは最高ではありませんが、あなたが辛抱して物事を正しく行えば解決できるようです。




私はちょうど同じ問題に直面した。 これは、MySQLデーモンが@your_machineに接続する権限を持つユーザとの接続に必要なマシンのIPにバインドされているために起こりました。 この場合、ユーザーはUSER_NAME @ MACHINE_NAME_OR_IPに接続する権限を持っている必要があります

私は自分のマシンにリモートアクセスしたいので、my.cnfを

bind-address = MY_IP_ADDRESS

bind-address = 0.0.0.0

ローカルホストから(そして私の場合は)外部のユーザがインスタンスに接続できるようになります。 MySQLを0.0.0.0にバインドすると、以下の両方の権限が有効になります:

USER_NAME@MACHINE_NAME_OR_IP

USER_NAME@localhost



同じだった。 ポートを削除することは私の場合に助けになったので、jdbc:mysql:// localhost /




Dockerコンテナのセットに問題がある場合は、ポート3306 EXPOSEするだけでなく、コンテナ-p 3306:3306外部からポートをマップすることも確認してください。 docker-compose.yml

version: '2'

services:
    mdb:
        image: mariadb:10.1
        ports:
            - "3306:3306"
        …



MySQLのために十分なメモリがない場合(私の場合)に起こります。 再起動するとそれが修正されますが、そのような場合は、より多くのメモリを搭載したマシンを検討するか、jvmsが使用するメモリを制限してください




phpstorm + vagrantのautoReconnectドライバオプションが役立ちました。




私の場合、

  1. リモートマシンのmysql設定を/etc/mysql/my.cnf変更します/etc/mysql/my.cnf bind-address = 127.0.0.1#bind-address = 127.0.0.1

  2. リモートマシンで、mysqlユーザ権限をGRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'password';

  3. 重要:リモートマシンでmysqlを再起動する: sudo /etc/init.d/mysql restart




私は同様の問題を抱えていて、私の場合の解決策は

  1. bind-address = 0.0.0.0から127.0.0.1への変更
  2. URLのローカルホストをlocalhost:3306に変更する

私が感じたことは、決してあきらめるべきではないということです。私はこの投稿や他のフォーラムからすべてのオプションを試しました...幸いです@saurab






Related