2011-05-03 26 views
115

我已經安裝MySQL,甚至以用戶身份登錄。如何測試MySQL正在運行的端口以及它是否可以連接?

但是,當我嘗試連接這樣的:

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

無論是作品。不知道是否都應該工作,但至少有一個應該:)

我怎樣才能確保端口確實是3306?有沒有一個Linux命令來看看它? 另外,有沒有更正確的方法來通過網址來試用它?

回答

179

要找到一個端口上監聽器,這樣做:

netstat -tln 

您應該會看到一條線,看起來像這樣如果MySQL確實是一個端口上偵聽。

tcp  0  0 127.0.0.1:3306    0.0.0.0:*     LISTEN  

端口3306是MySql的默認端口。

要連接,您只需使用您需要的任何客戶端,例如基本的mysql客戶端。

的mysql -h本地主機-u用戶數據庫

或者由你的庫代碼解釋的URL。

+1

什麼意思,而不是127.0.0.1:3306它說0.0.0.0:3306? – mbmast 2016-12-09 00:27:11

+1

@mbmast 127 ...表示僅在本地主機上偵聽(不可從外部訪問)。 0.0.0.0表示「所有接口」,因此通常是外部可見的。 – Keith 2016-12-09 00:39:42

+0

我認爲是外部可見的,它必須是機器自己的IP地址,0.0.0.0意味着該服務不能從任何地方獲得。我有錯嗎?我有一個運行MySQL的盒子,防火牆從任何IP地址打開3306,但MySQL拒絕連接,因爲目前MySQL正在偵聽0.0.0.0。 – mbmast 2016-12-09 16:44:53

5

兩個網址是不正確的 - 應該是

jdbc:mysql://host:port/database 

我認爲這不言而喻,但連接到使用Java數據庫需要一個JDBC驅動程序。你需要MySQL JDBC driver

也許你可以通過TCP/IP使用套接字進行連接。檢查出MySQL docs

http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html

UPDATE:

我嘗試遠程登錄到MySQL(telnet ip 3306),但它不工作:

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

我覺得這是你有什麼心神。

+0

沒有我三歲時似乎工作編輯它在我的代碼:(當我把它粘貼到瀏覽器,Firefox說它不能打開這樣的事情。我在哪裏/如何試用? - 謝謝! – GeekedOut 2011-05-03 01:54:06

+0

是的,你無法在瀏覽器中打開它。您需要MySQL JDBC驅動程序和Java代碼。 – duffymo 2011-05-03 02:03:57

+3

僅當您使用Java時纔有效。 – Keith 2011-05-03 04:04:25

55

grep port /etc/mysql/my.cnf(至少在於Debian/Ubuntu作品)

netstat -tlpn | grep mysql 

驗證

綁定地址127:0.0.1

在/ etc/MySQL的/我的。CNF看可能限制

+0

它解決了我的問題 – 2017-09-11 12:30:27

28
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 

用作根的所有細節。 -t選項將輸出限制爲TCP連接,-l用於偵聽端口,-p列出程序名稱,-n顯示端口的數字版本而不是命名版本。

通過這種方式,您可以看到進程名稱和端口。

+0

並沒有爲我工作 - 我得到了「TCP 0 0 127.0.0.1:3306 0.0.0.0:*聽 - 」 – Bryan 2014-07-27 16:41:33

+1

這是好多了,因爲它顯示的名字 – PaulBGD 2014-08-07 01:54:34

+2

它不工作。試用sudo。謝謝。 – 2015-01-28 18:19:47

4

一些更簡單的方法:如果你只是想檢查MySQL是否在某個端口上,你可以在終端中使用下面的命令。在Mac上測試。 3306是默認端口。

mysql --host=127.0.0.1 --port=3306

如果成功登錄到MySQL shell終端,你很棒!這是我在成功登錄時獲得的輸出。

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> 
110

使用MySQL客戶端:

mysql> SHOW GLOBAL VARIABLES LIKE 'PORT'; 
+0

錯誤1146(42S02):表'performance_schema。global_variables'不存在 – 2016-09-05 01:20:07

0

我同意@ bortunac的解決方案。 my.conf是特定於mysql的,而netstat將爲您提供所有偵聽端口。

也許使用兩者,一個確認哪個是爲mysql設置的端口,另一個是用來檢查系統是否通過該端口偵聽。

我的客戶端使用的CentOS 6.6,我發現在/ etc /的my.conf文件,所以我用:

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

4

3306是MySQL默認端口。以檢查它:

netstat -nl|grep 3306 

它應該給這樣的結果:

TCP 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN

4

只能使用-e--execute)選項:

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

您的「用戶名」和「密碼」

0

更換root如果您的系統上,其中netstat不可用(例如RHEL 7和最近的Debian發行版),您可以使用ss,如下圖所示:

sudo ss -tlpn | grep mysql 

你會得到這樣的輸出如下:

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

第四列是Local Address:Port。所以在這種情況下,Mysql正在偵聽默認端口3306。

0

對於我來說,@ joseluisq的回答產生了:

ERROR 1045(28000):拒絕訪問用戶 '根' @ 'localhost' 的(使用密碼:NO)

但它的工作這樣:

$ mysql -u [email protected] -e "SHOW GLOBAL VARIABLES LIKE 'PORT';" 
+---------------+-------+ 
| Variable_name | Value | 
+---------------+-------+ 
| port   | 3306 | 
+---------------+-------+ 
1

在Mac OS X上,有兩個選項。 netstatlsof

使用netstat將不會在Mac OS X上顯示進程,因此使用netstat只能通過端口進行搜索。
使用lsof將顯示進程名稱。

我做了以下爲我遇到端口衝突(搬運工集裝箱):

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)

相關問題