如何测试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 上,有两个选项。 netstat
或 lsof
在 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在哪个端口上运行以及是不是可以连接?的主要内容,如果未能解决你的问题,请参考以下文章
如何将使用 docker 创建的 MySQL 连接到另一个端口(不是端口 3306)?