6

外部からmysqlにアクセスできません。それはmysqlまたはファイアウォールのもの、またはmysql内の何らかの特権だと思います。

私はすでにインターネット上の手順を実行しようとしました。私がやっていることを例証し、同じ問題を抱えている他の人々のためのチュートリアルとして役立つように、プロセスを段階的に説明します。

私は使用しています:

-ubuntu server 12.04 
-mysql-server5.5
-there is NO hardware firewall just software one

1-最初にmysqlをインストールしました:

sudo apt-get install mysql-server

2-ルートパスワードを次のように変更しました:

sudo /etc/init.d/mysql stop
sudo mysqld --skip-grant-tables &
mysql -u root mysql
UPDATE user SET Password=PASSWORD('MYPASSWORD') WHERE User='root'; FLUSH PRIVILEGES; exit;

3-任意のIPにルートするためのすべての特権を与えます:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

4- my.cnf を編集した後

sudo nano /etc/mysql/my.cnf

以下のように、行にコメントを付けました。

#skip-external-locking 
#bind-address           = 127.0.0.1

5-MySql 3306を許可するようにiptablesを編集しました:

iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

ここで netstat -ant と入力します:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:10000           0.0.0.0:*               LISTEN
tcp        0      0 66.123.173.170:53       0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:993             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:995             0.0.0.0:*               LISTEN
tcp        0      0 66.123.173.170:22       189.32.2.232:49167      ESTABLISHED
tcp        0    336 66.123.173.170:22       189.32.2.232:49654      ESTABLISHED
tcp6       0      0 :::110                  :::*                    LISTEN
tcp6       0      0 :::143                  :::*                    LISTEN
tcp6       0      0 :::8080                 :::*                    LISTEN
tcp6       0      0 :::21                   :::*                    LISTEN
tcp6       0      0 :::53                   :::*                    LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 ::1:953                 :::*                    LISTEN
tcp6       0      0 :::25                   :::*                    LISTEN
tcp6       0      0 :::993                  :::*                    LISTEN
tcp6       0      0 :::995                  :::*                    LISTEN
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN

ポート 3306 が開いていることを確認してください。私は正しいですか?

6-mysqlを再起動しました:

sudo service mysql start

私が入力した:

service mysql status

結果:

mysql start/running, process 20757

7- サーバーに接続しようとしました:

mysql -h 66.123.173.170 -u root -p

このエラーが発生しました:

エラー 2003 (HY000): '66.123.173.170' の MySQL サーバーに接続できません (111)

私がする時:

mysql -h 127.0.0.1 -u root -p

MySQL>ターミナルを開くと動作します

8- 疑問: このプロセスに何か問題があると思いますか?

OBS: ステップ 4 で、バインド アドレスをbid-address = 0.0.0.0 に設定しようとしましたが、問題は解決しませんでした。

9- 疑問: MySQL をオフにした場合: service mysql stopmysql -h 127.0.0.1 -u root -p でローカルにファイアウォールにアクセスできますか?

私はそれを行い、mysqlが停止/待機していても接続できました(これは、MySQLの停止と取得ステータスの後に与えられたステータスでした)。

4

4 に答える 4

7

再開された解決策:

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が何をするのかわからない場合: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 = * 

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

于 2012-08-11T03:38:48.177 に答える
2

netstat の出力は、外部接続に対して開かれていないことを示しています。0.0.0.0代わりにそこに表示する必要があります127.0.0.1(これはローカルではなくループバックです)。

おそらくbind-address、mysql 構成に別のものを追加する必要があります (サービスを再起動することを忘れないでください)。

試す

bind-address = *

または実際の NIC ip ( 66.123.173.170) おそらく。

于 2012-08-10T16:50:11.463 に答える
0

行をコメントアウトするだけでなく、my.cnf の bind-address を 0.0.0.0 に設定する必要があります。

補足として、構成したと言うように、おそらくすべての IP アドレスからのルートアクセスを許可しないでください。root をローカル マシンのみに制限します。

于 2012-08-10T17:05:57.153 に答える
0

デフォルトでは、MySQL は localhost をリッスンします。実際のインターフェイスで実行するように構成する必要があります。または、バインドで 0.0.0.0 アドレスを使用できます。

于 2012-08-10T17:56:25.860 に答える