【问题标题】: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 进行尝试?

【问题讨论】:

    标签: mysql linux ubuntu


    【解决方案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 进行设置。但我真的只需要端口号。
                        • 这并不能真正回答问题。
                        猜你喜欢
                        • 1970-01-01
                        • 2016-01-03
                        • 2019-12-07
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2014-09-16
                        • 1970-01-01
                        相关资源
                        最近更新 更多