如何测试MySQL在哪个端口上运行以及是否可以连接到该端口?


143

我已经安装了MySQL,甚至以用户身份登录那里。

但是当我尝试这样连接时:

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

都不行。不知道两者是否都应该工作,但是其中至少一个应该:)

如何确定端口确实是3306?是否有Linux命令以某种方式查看它?另外,是否有更正确的方法通过网址进行尝试?

Answers:


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
什么是0.0.0.0:3306而不是127.0.0.1:3306是什么意思?
mbmast

1
@mbmast 127 ...意味着仅在本地主机上侦听(无法从外部访问)。0.0.0.0表示“所有接口”,因此(通常)在外部可见。
基思

我认为它是外部可见的,它必须是计算机自己的IP地址,而0.0.0.0意味着该服务在任何地方都不可用。我有错吗?我有一个运行MySQL的机器,防火墙从任何IP地址都打开了3306,但是MySQL拒绝了该连接,我想是因为当前MySQL正在监听0.0.0.0。
mbmast

应将此与@bortunac的答案合并,后者引用该-p参数。添加过程确实有助于使此信息更有用。
Ragaar

1
@JBeck三个标志,用于Linux。TCP,侦听器,无名称查找。见man netstat
基思(Keith)


65

grep port /etc/mysql/my.cnf (至少在debian / ubuntu作品中)

要么

netstat -tlpn | grep mysql

校验

绑定地址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

用作所有详细信息的根目录。该-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

两个网址都不正确-应该是

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

更新:

我尝试通过telnet进入MySQL(telnet ip 3306),但无法正常工作:

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

我认为这就是您的想法。


当我在代码中尝试时似乎没有用:(同样,当我将其粘贴到浏览器中时,Firefox说它无法打开这样的东西。我在哪里/如何尝试?-谢谢!
GeekedOut

是的,您无法在浏览器中打开它。您需要MySQL JDBC驱动程序和Java代码。
duffymo

3
仅当您使用Java时。
基思

我正在尝试通过database.yml文件使用Ruby on Rails进行设置。但是我只需要端口号。
GeekedOut

这并不能真正回答问题。
AStopher '17

6

一种简单的方法:如果您只想检查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>

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上,有两个选项。 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))

第四栏是Local Address:Port。因此,在这种情况下,Mysql正在监听端口3306(默认端口)。


1

我同意@bortunac的解决方案。my.conf是特定于mysql的,而netstat将为您提供所有侦听端口。

也许两者都用,一个可以确认哪个是为mysql设置的端口,另一个可以检查系统是否正在通过该端口侦听。

我的客户端使用CentOS 6.6,并且在/ etc /下找到了my.conf文件,因此我使用了:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.