【问题标题】:ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)错误 2003 (HY000): 无法连接到“127.0.0.1”上的 MySQL 服务器 (111)
【发布时间】:2010-12-13 00:16:51
【问题描述】:

我使用以下命令:

mysql -u root -h 127.0.0.1 -p

错误信息是:

ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)

我该如何解决?

【问题讨论】:

  • mysql 守护进程正在运行吗?你有防火墙吗?你能telnet到mysql默认端口是306吗 - telnet localhost 3306
  • mysql 守护进程正在运行。我确定。
  • 只有我,或者如果您连接到本地 mysql 服务器,您不需要指定主机,例如mysql -u root -p 应该可以吗?
  • 只是为了确保您尝试在本地连接到数据库服务器?
  • 我在 ubuntu-12.04.2 上全新安装了 mysql。版本为 14.14 Distrib 5.5.32,对于使用 readline 6.2 的 debian-linux-gnu (x86_64),其默认配置不包含“skip-networking”。所以你不会遇到这个版本的错误。

标签: mysql mysql-error-2003


【解决方案1】:

检查3306端口是否开放(更多here):

nmap -p3306 127.0.0.1

如果您收到类似:

Starting Nmap 7.92 ( https://nmap.org ) at 2022-01-07 11:55 CET
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000082s latency).

PORT     STATE  SERVICE
3306/tcp closed mysql

Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds

然后打开3306端口:

sudo iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

或者sudo ufw allow 3306,如果你使用UFW

检查:netstat -lnp | grep mysql 你应该得到这样的东西:

cp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      2048/mysqld
tcp6       0      0 :::33060                :::*                    LISTEN      2048/mysqld
unix  2      [ ACC ]     STREAM     LISTENING     514961   2048/mysqld          /var/run/mysqld/mysqld.sock
unix  2      [ ACC ]     STREAM     LISTENING     514987   2048/mysqld          /var/run/mysqld/mysqlx.sock

【讨论】:

  • 你说的“试试不要关机”是什么意思?请通过editing (changing) your answer 回复,而不是在 cmets 中(without "Edit:"、"Update:" 或类似的 - 答案应该看起来像是今天写的)。
【解决方案2】:

如果您在此处显示相同的错误消息并且使用Docker - 尝试使用数据库服务的名称作为主机。

services:
  app:
    blablabla
  db:
    blablabla

我的意思是,而不是:

127.0.0.1 or localhost

使用:

db

【讨论】:

    【解决方案3】:

    请确保您的 MySQL 服务器在 localhost 上运行。

    在 Linux 上

    检查 MySQL 服务器是否正在运行:

    sudo service mysql status

    运行 MySQL 服务器:

    sudo service mysql start

    在 Windows 上

    检查 MySQL 服务器是否正在运行:

    net start

    如果 MySQL 不在列表中,您必须启动/运行 MySQL。

    运行 MySQL 服务器:

    net start mysql

    【讨论】:

      【解决方案4】:

      对于 Docker 用户 - 当尝试使用 mysql -u root -h 127.0.0.1 -p 连接到本地 SQL 数据库服务器并且您的数据库在 Docker 中运行时 strong> 容器,确保 MySQL 服务已启动并正在运行(使用 docker ps 验证并检查您是否也在正确的端口中)。如果容器关闭,您将收到连接错误。

      最佳做法是在您的机器上设置/etc/hosts 中的 IP 地址:

      127.0.0.1 db.local
      

      并由mysql -u root -h db.local -p 运行。

      【讨论】:

        【解决方案5】:

        查看my.cnf 文件。如果它包含[client] 部分,并且port 不是真正的监听端口(默认3306),则必须使用显式参数-P 3306 连接服务器,例如

        mysql -u root -h 127.0.0.1 -p -P 3306
        

        【讨论】:

        • 在哪里可以搜索my.cnf。它不在 wamp 服务器中,在我的笔记本电脑中
        • 在windows上,它通常调用'my.ini'
        【解决方案6】:

        当您在连接数据库之前忘记启动数据库时会发生这种情况:

        mysql.server start
        

        然后

        mysql -u root -p -h 127.0.0.1
        

        【讨论】:

        • 在 mac 和 linux 的终端中。我相信它在 windows CMD 中是一样的,但我不确定。
        • 我必须在我的带有 MySQL 社区服务器的 AWS EC2 实例中使用 sudo service mysqld start 启动 MySQL 服务器。
        【解决方案7】:

        在 Windows 上,可能会出现此问题,因为您的 MySQL 服务器尚未安装和运行。

        为此,请以管理员身份启动命令提示符并输入命令:

        "C:\Program Files (x86)\MySQL\MySQL Server 5.1\bin\mysqld" --install
        

        如果您收到“服务安装成功”消息,那么您需要启动 MySQL 服务。为此:转到 Services 窗口 (Task Manager服务开放服务)。 从顶部导航栏中搜索 MySQL 并启动它。 然后如果尝试打开mysql.exe,它会工作。

        【讨论】:

        • 一个小错误,cd "C:\Program Files (x86)\MySQL\MySQL Server 5.1\bin" 然后mysqld --install。另外服务器编号取决于下载。
        【解决方案8】:

        我只是有这个问题...在 Windows 7 和 WAMP 服务器中运行...在reading this 之后。

        我发现是防病毒防火墙导致了这个问题。

        【讨论】:

        • 什么是“防病毒防火墙”?实际的产品名称?
        • 链接(实际上)已损坏(重定向到通用 sitepoint.com/community)。
        【解决方案9】:

        我也遇到了同样的问题。

        以下帮助我解决了问题

        转到控制面板管理工具服务。在里面你肯定会看到 MySQL 服务:右键单击并说启动(强制启动)。

        【讨论】:

        • 大概是在 Windows 上?
        【解决方案10】:

        我刚刚重启了我的 MySQL 服务器,问题就解决了。

        在 Windows 上,net stop MySQL,然后是 net start MySQl

        Ubuntu(Linux)上:sudo service start mysql

        【讨论】:

          【解决方案11】:

          就我而言(远程连接),它有助于关闭服务器上的防火墙:

          service iptables stop
          

          【讨论】:

          • @ram 可能您正在使用其他防火墙。或者你的问题根本不是防火墙。检查您的 linux 发行版的文档。
          • @ram 试试service firewalld stop
          • MySQL 通常在 3306 端口上运行,因此请将其添加到您的防火墙中
          • 非常感谢!我必须禁用我的防火墙才能开始工作:sudo ufw disable
          【解决方案12】:

          如果您使用的是 Ubuntu,则必须使用以下步骤来避免此错误(如果没有启用复制):

          1. 运行命令vim /etc/mysql/my.cnf
          2. 使用# 符号评论bind-address = 127.0.0.1
          3. 重启一次 MySQL 服务器。

          在第 1 步中,如果在 my.cnf 文件中找不到 bind-address,请在 /etc/mysql/mysql.conf.d/mysqld.cnf 文件中查找。

          在启用 MySQL 复制的情况下更新

          尝试在my.cnf文件中绑定MySQL服务器的IP地址连接MySQL服务器,而不是localhost127.0.0.1.

          【讨论】:

          • 谢谢!!!这个问题我想了很久!我注释掉了那行,保存了文件,然后运行service mysql restart。现在它可以工作了!
          • /etc/mysql/my.cnf中没有bind-address = 127.0.0.1
          • @developer,我在这里找到了我的:/etc/mysql/mysql.conf.d/mysqld.cnf
          • 如果您的 Debian 版本正在运行 MariaDB——谁知道呢,您可能会在 /etc/mysql/mariadb.conf.d 目录中找到绑定地址;您还可以通过在 /etc/mysql/ 中运行以下命令来定位带有绑定地址的文件: grep -r "bind\-address" 。
          • @JustinVincent - 谢谢!另一个更新给你。我正在使用 Debian 10(在 DigitalOcean 服务器上),它在这里:/etc/mysql/mariadb.conf.d/50-server.cnf.
          【解决方案13】:

          尝试 localhost 而不是 127.0.0.1 连接或在您的 connection-config 中。它在 Debian 6.0 (Squeeze) 服务器上为我工作。

          【讨论】:

          • 仅供参考,如果您指定 localhost,这会告诉 Mysql 通过 unix 套接字(ubuntu 上的 /var/run/mysqld/mysqld.sock)而不是通过 TCP 套接字进行连接。
          【解决方案14】:

          如果您在非默认端口上运行,您可以尝试使用--port=<port num>,前提是--skip-networkingnot enabled.

          【讨论】:

            【解决方案15】:

            您需要在 MySQL 配置文件(my.inimy.cnf)中将 bind-address 参数更改为 127.0.0.1 或使用在那里定义。

            如果这不起作用,您应该检查 MySQL 服务是否正在运行。

            【讨论】:

            • 我已将“bind-address = 127.0.0.1”行添加到文件 my.cnf。但它不起作用。
            • 如果此行存在,mysql 将只侦听列出的地址。要启用远程访问,您应该删除此行。请注意这会带来的安全隐患。
            • 在 my.cnf 中添加 bind-address =127.0.0.1 会禁用与数据库的远程连接。所以即使它会起作用(它不是) - 这不是一个好的解决方案。
            • 绑定地址应为 0.0.0.0,除非您不希望任何人 else 连接。
            【解决方案16】:

            如果您已尝试上述所有方法,但仍然无效。检查防火墙。

            我试图从 Windows 机器连接到安装在带有 CentOs7 的 VirtualBox 机器上的 MySql Server 5.7.32。我已经尝试了所有方法,但它无法正常工作,即使我可以 ping 无法连接到 MySql 服务器的机器。

            在 CentOs7 上检查防火墙的命令是:

            第 1 步:检查防火墙服务的状态:

            systemctl status firewallid.service
            

            第 2 步:禁用防火墙服务

            systemctl stop firewallid.service
            

            【讨论】:

              【解决方案17】:

              我在重新安装时更改了安装目录,它可以工作。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2012-07-30
                • 1970-01-01
                • 2021-02-17
                • 2014-05-06
                • 2014-05-10
                • 2014-06-25
                • 2014-02-02
                相关资源
                最近更新 更多