sql >> データベース >  >> RDS >> Mysql

MySQLリモート接続[通常とは異なります]

    再開された解決策:

    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 = * 
    

    これが他の誰かに役立つことを願っています。



    1. R12.2オンラインパッチ準備レポート

    2. OLAP接続の使用中にエラーが発生しました:MSOLAPプロバイダーがローカルマシンに登録されていません...

    3. MySQLでの日付範囲の競合のチェック

    4. T-SQLで文字列から部分文字列を抽出する方法