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

Posted

技术标签:

【中文标题】如何测试MySQL在哪个端口上运行以及是不是可以连接?【英文标题】:How to test which port MySQL is running on and whether it can be connected to?如何测试MySQL在哪个端口上运行以及是否可以连接? 【发布时间】:2011-08-17 09:07:22 【问题描述】:

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

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

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

两者都不起作用。不确定两者是否应该工作,但至少其中一个应该工作:)

如何确定端口确实是 3306?是否有一个 linux 命令可以以某种方式查看它? 另外,有没有更正确的方法可以通过 url 进行尝试?

【问题讨论】:

【参考方案1】:

我认为使用 lsof 命令行工具查找与 mysql 服务器关联的端口最合适的方法。

lsof -i -n -P | grep mysql
mysqld    1556 prince   10u  IPv4 0x6ad3fd78a9051969      0t0  TCP 127.0.0.1:3306 (LISTEN)

【讨论】:

【参考方案2】:

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

netstat -tlpn | grep mysql

验证

绑定地址 127.0.0.1

在 /etc/mysql/my.cnf 中查看可能的限制

【讨论】:

【参考方案3】:

在 mac os X 上,有两个选项。 netstatlsof

在 Mac OS X 上使用 netstat 不会显示进程。因此使用 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)

【讨论】:

【参考方案4】:

对我来说,@joseluisq 的回答是:

ERROR 1045 (28000): 用户 'root'@'localhost' 的访问被拒绝(使用密码:否)

但它是这样工作的:

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

【讨论】:

【参考方案5】:

如果您在一个不可用 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,这是默认的。

【讨论】:

【参考方案6】:

要在端口上查找侦听器,请执行以下操作:

netstat -tln

如果 mysql 确实在侦听该端口,您应该会看到如下所示的一行。

tcp        0      0 127.0.0.1:3306              0.0.0.0:*                   LISTEN      

3306 端口是 MySql 的默认端口。

要连接,您只需使用所需的任何客户端,例如基本的 mysql 客户端。

mysql -h localhost -u 用户数据库

或由您的库代码解释的 url。

【讨论】:

用 0.0.0.0:3306 代替 127.0.0.1:3306 是什么意思? @mbmast the 127... 表示仅在本地主机上侦听(不可从外部访问)。 0.0.0.0 表示“所有接口”,因此(通常)在外部可见。 我认为是外部可见的,它必须是机器自己的 IP 地址,并且 0.0.0.0 意味着该服务在任何地方都不可用。我有错吗?我有一个运行 MySQL 的盒子,防火墙从任何 IP 地址打开了 3306,但 MySQL 拒绝连接,我想是因为当前 MySQL 正在侦听 0.0.0.0。 应该将此与@bortunac 的答案合并,该答案引用-p 参数。添加流程确实有助于使这些信息更有用。 @JBeck 三个标志,用于 Linux。 TCP,侦听器,无名称查找。见man netstat【参考方案7】:
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 显示端口的数字版本而不是命名版本。

这样就可以看到进程名和端口了。

【讨论】:

对我不起作用 - 我得到了“tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN -”【参考方案8】:

尝试仅使用-e (--execute) 选项:

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

root 替换为您的“用户名”和“密码”

【讨论】:

【参考方案9】:

你可以使用

ps -ef | grep mysql

【讨论】:

【参考方案10】:

3306 是 mysql 的默认端口。检查它:

netstat -nl|grep 3306

它应该给出这个结果:

tcp 0 0 127.0.0.1:3306 0.0.0.0:* 听

【讨论】:

【参考方案11】:

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

也许两者都用,一个用来确认哪个是为 mysql 设置的端口,另一个用来检查系统是否正在通过那个端口进行监听。

我的客户端使用的是 CentOS 6.6,我在 /etc/ 下找到了 my.conf 文件,所以我使用了:

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

【讨论】:

【参考方案12】:

使用Mysql客户端:

mysql> SHOW GLOBAL VARIABLES LIKE 'PORT';

【讨论】:

错误 1146 (42S02): 表 'performance_schema.global_variables' 不存在【参考方案13】:

对某些人来说更简单的方法:如果您只想检查 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>

【讨论】:

【参考方案14】:

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

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

更新:

我尝试 telnet 进入 MySQL (telnet ip 3306),但它不起作用:

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

我想这就是你的想法。

【讨论】:

当我在我的代码中尝试它时似乎没有工作:(当我将它粘贴到浏览器中时,Firefox 说它无法打开这样的东西。我在哪里/如何尝试它? - 谢谢! 是的,您无法在浏览器中打开它。您需要 MySQL JDBC 驱动程序和 Java 代码。 仅当您使用 Java 时才如此。 我正在尝试通过 database.yml 文件使用 Ruby on Rails 进行设置。但我真的只需要端口号。 这并不能真正回答问题。

以上是关于如何测试MySQL在哪个端口上运行以及是不是可以连接?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不同的端口上连接到 MySQL

如何将使用 docker 创建的 MySQL 连接到另一个端口(不是端口 3306)?

在mac终端中,如何查看mysql在哪个端口运行?

mySQL数据库连接不上怎么办。。

如何使用 DataGrip 连接到 MAMP MySQL 服务器

无法启动 MySQL,端口 3306 忙