MySQLが実行されているポートと、それが接続できるかどうかをテストする方法は?


143

MySQLをインストールし、ユーザーとしてログインしました。

しかし、私がこのように接続しようとすると:

http://localhost:3306
mysql://localhost:3306

どちらも機能しません。両方が動作するはずかどうかはわかりませんが、少なくとも一方は動作するはずです:)

ポートが本当に3306であることを確認するにはどうすればよいですか?どういうわけかそれを見るためのLinuxコマンドはありますか?また、URLを介してそれを試すより正しい方法はありますか?

回答:


207

ポート上のリスナーを見つけるには、次のようにします。

netstat -tln

mysqlが実際にそのポートでリッスンしている場合は、次のような行が表示されます。

tcp        0      0 127.0.0.1:3306              0.0.0.0:*                   LISTEN      

ポート3306はMySqlのデフォルトポートです。

接続するには、基本的なmysqlクライアントなど、必要なクライアントを使用するだけです。

mysql -h localhost -uユーザーデータベース

または、ライブラリコードによって解釈されるURL。


2
127.0.0.1:3306の代わりに0.0.0.0:3306と表示されている場合、それはどういう意味ですか?
mbmast 16

1
@mbmast 127 ...は、ローカルホストでのみリッスンすることを意味します(外部からはアクセスできません)。0.0.0.0は「すべてのインターフェース」を意味するため、(通常)外部から見ることができます。
キース

私は外部から見えると思っていました。それはマシン自身のIPアドレスでなければならず、0.0.0.0はどこからでもサービスを利用できないことを意味します。私はそれを間違っていますか?私はMySQLを実行しているボックスを持っており、ファイアウォールは任意のIPアドレスから3306を開いていますが、MySQLは接続を拒否しています。現在、MySQLは0.0.0.0をリッスンしているためです。
mbmast 16

これを、-pパラメーターを参照する@bortunacの回答とマージする必要があります。プロセスを追加すると、この情報がさらに役立ちます。
Ragaar 2017

1
Linuxの場合、@ JBeck 3つのフラグ。TCP、リスナー、名前検索なし。参照してくださいman netstat
キース

138

Mysqlクライアントの使用:

mysql> SHOW GLOBAL VARIABLES LIKE 'PORT';

エラー1146(42S02):テーブル 'performance_schema.global_variables'は存在しません
Maria Ines Parnisari

65

grep port /etc/mysql/my.cnf (少なくともdebian / ubuntuで動作します)

または

netstat -tlpn | grep mysql

確認

bind-address 127.0.0.1

/etc/mysql/my.cnfにあり、可能な制限を確認します


32
netstat -tlpn

以下のようなリストが表示されます。

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1393/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1859/master
tcp        0      0 123.189.192.64:7654     0.0.0.0:*               LISTEN      2463/monit
tcp        0      0 127.0.0.1:24135         0.0.0.0:*               LISTEN      21450/memcached
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      16781/mysqld

すべての詳細についてrootとして使用します。-tオプションでは、TCPコネクションへの出力を制限-lポート、リスニングのための-pリストのプログラム名と-n番組ポートの数値バージョンの代わりに、名前のバージョンを。

このようにして、プロセス名とポートを確認できます。


1
うまくいきませんでした-"tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN-"
Bryan

7

-e--execute)オプションのみを使用してみてください:

$ mysql -u root -proot -e "SHOW GLOBAL VARIABLES LIKE 'PORT';"                                                                                                       (8s 26ms)
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+

root「ユーザー名」と「パスワード」に置き換えます


6

両方のURLが正しくありません-である必要があります

jdbc:mysql://host:port/database

言うまでもありませんが、Javaでデータベースに接続するにはJDBCドライバーが必要です。MySQL JDBCドライバーが必要です

おそらく、TCP / IP上のソケットを使用して接続できます。MySQLのドキュメントを確認してください。

http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.htmlを参照してください

更新:

MySQL(telnet ip 3306)にtelnetで接続しようとしましたが、機能しません。

http://lists.mysql.com/win32/253

これはあなたが考えていたものだと思います。


私は私のコードでそれをしようとしたときに動作していないようでした:(私はブラウザにそれを貼り付けた場合も、Firefoxはそれが開いて、このようなAの事はできないと述べどこで/どのように私はそれを試してみることができ- 。ありがとう!
GeekedOut

ええ、ブラウザで開くことはできません。MySQL JDBCドライバーとJavaコードが必要です。
duffymo

3
Javaを使用している場合のみです。
キース

私は、database.ymlファイルを介してRuby on Railsを使用して設定しようとしています。しかし、本当に必要なのはポート番号だけです。
GeekedOut

これは実際には質問の答えにはなりません。
AStopher

6

一部の人にとってはより単純なアプローチ:MySQLが特定のポートにあるかどうかを確認するだけの場合は、ターミナルで次のコマンドを使用できます。Macでテスト済み。3306がデフォルトのポートです。

mysql --host=127.0.0.1 --port=3306

MySQLシェルターミナルへのログインに成功したら、問題ありません。これは、ログインが成功したときに得られる出力です。

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9559
Server version: 5.6.21 Homebrew

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

5

3306はmysqlのデフォルトのポートです。それを確認してください:

netstat -nl|grep 3306

それはこの結果を与えるはずです:

tcp 0 0 127.0.0.1:3306 0.0.0.0:*リッスン



3

私にとって、@ joseluisqの答えは次のとおりです。

エラー1045(28000):ユーザー 'root' @ 'localhost'のアクセスが拒否されました(パスワードを使用:NO)

しかし、それはこのように機能しました:

$ mysql -u root@localhost  -e "SHOW GLOBAL VARIABLES LIKE 'PORT';"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+

3

Mac OS Xでは、2つのオプションがあります。 netstatまたはlsof

を使用netstatしてもMac OS Xでのプロセスは表示されません。したがって、netstatを使用すると、ポートでのみ検索できます。
を使用lsofすると、プロセス名が表示されます。

ポートの競合(dockerコンテナー)が発生したため、次のことを行いました。

netstat -aln | grep 3306

出力: tcp46 0 0 *.3306 *.* LISTEN

sudo lsof -i -P | grep -i "LISTEN" | grep -i 3306

出力: mysqld 60608 _mysql 31u IPv6 0x2ebc4b8d88d9ec6b 0t0 TCP *:3306 (LISTEN)


2

netstat使用できないシステム(RHEL 7以降のDebianリリースなど)を使用している場合ssは、次のようにを使用できます。

sudo ss -tlpn | grep mysql

そして、あなたは出力のために次のようなものを得るでしょう:

LISTEN     0      50        *:3306        *:*        users:(("mysqld",pid=5307,fd=14))

4列目はLocal Address:Portです。したがって、この場合、Mysqlはデフォルトのポート3306でリッスンしています。


1

@bortunacのソリューションに同意します。my.confはmysql固有ですが、netstatはすべての待機ポートを提供します。

おそらく両方を使用します。1つはmysqlに設定されているポートを確認するため、もう1つはシステムがそのポートをリッスンしていることを確認するためです。

私のクライアントはCentOS 6.6を使用しており、/ etc /の下にmy.confファイルを見つけたので、以下を使用しました。

grep port /etc/my.conf (CentOS 6.6)

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