MySQLはリモート接続の受け入れを拒否します


13

mysql(percona 5.5)を使用して新しいUbuntuサーバーをインストールしましたが、リモートホストからの接続の受け入れを拒否しています

このサーバーにリモートで接続しようとすると、次のようになります。

mysql -h10.0.0.2 -uroot -pmypassowrd
ERROR 2003 (HY000): Can't connect to MySQL server on '10.0.0.2' (111)

telnet 10.0.0.2 3306
Trying 10.0.0.2...
telnet: Unable to connect to remote host: Connection refused

mysqlがリモート接続をリッスンするかどうかを確認したところ、次のようになりました。

sudo netstat -ntlup | grep mysql
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      127018/mysqld 

ご覧のとおり127.0.0.1:3306、「ローカル接続のみを受け入れる」という意味です。

skip_networkingbind-address変数を確認しました-すべてオフになっています:

mysql> show variables like '%skip_networking%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| skip_networking | OFF   |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> show variables like '%bind%';
Empty set (0.00 sec)

私はまったく同じ設定の別のサーバーを持っていて、それはうまくいきます:

sudo netstat -ntlup | grep mysql
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2431/mysqld 

これの理由は何ですか?mysqlをリモート接続に応答させるにはどうすればよいですか?


この変数bind_addressはバージョン5.6(bugs.mysql.com/bug.php?id=44355)以降でのみ使用できるため、設定されていても、v5.5では空のセットを返します。
偽物2014

my.cnf設定を表示します。
user9517 14

ファイアウォールやルーティングの問題など、mySQL以外の問題を確認しましたか?
Stese

回答:


20

のセクションに追加bind-address = 0.0.0.0して、mysqldを再起動して[mysqld]ください。my.cnf


2
ファイルは次の場所にあります/etc/mysql/mysql.conf.d/mysqld.cnf
Eduardo Cuomo

鉱山は/etc/my.cnf.d/bind-addr.cnfにありました
joseph

0

これは、mysqlデータベースユーザーテーブルが原因である可能性があります(mysqlを使用して、テーブルを表示してください)。0.0.0.0へのバインドが機能しない場合は、そのテーブルの「localhost」の代わりにホスト「%」をユーザーに提供してみてください。

たとえば、次のようなユーザーを作成してみてください。

CREATE USER yourusername @ '%' IDENTIFIED BY 'yourpassword'

antはそのユーザーとの接続を試みます。


3
接続が拒否されたということは、通常、関連するIP:ポートで何もリッスンしていないことを意味します。
user9517 14

確かに、「MySQLサーバーに接続できません」というメッセージが表示されました。Telnetで思い出せません。ごめんなさい。
periket2000 14

「MySQLに接続できません」は、ユーザーが使用できない特権が原因ではありません。これは、接続試行で一致しない{IP:port}ペアです。
Fabien Haddadi、2018

0

他のすべてが失敗し、サーバーがデフォルトのポートでリッスンしていることを確認し、他のホストからmysqlクライアントに接続しようとしている場合は、mysqlコマンドのURLでポートを指定してみてください。

奇妙なことに、次の構文を使用する必要がありました。

mysql -h someHost --port=3306 -u someUser -p someDb

私はこれを完全に偶然に見つけました(バグ?)(髪を失った後:))。

私のセットアップ:debian jessie、新鮮なmysql 5.7.18、users / dbを作成、bind-addressをコメントアウト、mysqldを再起動


--portディレクティブで示されているように、合理的な説明は、someHost MySQLサーバーが実際に3306でリッスンしていることです。ただし、mysqlクライアントバイナリはMariaDBバージョンから取得されます。したがって、特に指定されていない限り、デフォルトとしてポート3307を使用します。使用しているmysqlクライアントバイナリのオリジンを確認してください。ヒント:PATH環境変数も確認してください...
Fabien Haddadi 2018

0

この問題が発生したばかりで、ファイアウォールに関連しているようです。ところで-Mysqlトラブルシューティングコマンドを@Temnovitに感謝します。

netstatを使用して、サーバーが実行中で正しいポート上にあることを通知しました。単純なtelnetコマンドを使用して、サーバーがそのポートでの接続を受け付けていないこともわかりました。

# On the remote machine
➜  ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
telnet: connect to address 192.168.1.57: Connection refused
➜  ~ 

Fedoraファイアウォールコマンドに関する別の役立つ回答に従って、正しいポートを開くことができました。

# On the server
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

その後、私のtelnetコマンドは成功しました。

# On the remote machine
➜  ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
Connected to 192.168.1.57.
Escape character is 'X'.

telnet> Connection closed.
➜  ~

それでも問題が解決しない場合は、ユーザー権限の問題である可能性があります。


0

私がしているmariadbインストールされています。解決策は、bind-address場所を変更することでした/etc/mysql/mariadb.conf.d/50-server.cnf


-1

以下のリンクに記載されている解決策で問題を解決できます http://www.debianhelp.co.uk/remotemysql.htm


2
bml13、あなたの答えを支持するリンクを引用することは優れた習慣ですが、私たちは人々がここに答えを書き、リンクを追加するのではなく、リンクを置いてそのままにしておくことを強く望みます。
MadHatter 14

1
...特にこれがデッドリンクになっているためです。
haz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.