【问题标题】:mysqli_real_connect(): (HY000/2002): No such file or directorymysqli_real_connect(): (HY000/2002): 没有这样的文件或目录
【发布时间】:2017-06-12 09:02:15
【问题描述】:
mysqli_real_connect(): (HY000/2002): No such file or directory

MacOS 上的 PhpMyAdmin 错误。我想要答案我真的不知道我需要做什么来解决这个问题。

【问题讨论】:

标签: php macos mysqli phpmyadmin


【解决方案1】:

在 /etc/phpmyadmin/config.inc.php 中将 localhost 更改为 127.0.0.1

$cfg['Servers'][$i]['host'] = '127.0.0.1';

这样做的原因是,如果您使用 localhost,pma 会尝试连接到 mysql.socket。如果你使用 127.0.0.1 PMA 建立一个 TCP 连接应该可以工作。

【讨论】:

  • 我很高兴找到这个答案来让事情正常进行,但真正的解决方法是什么?这是一种解决方法。您应该能够使用localhost
  • 你会这么认为,但显然不是。关于“连接类型”设置:“从 4.7.0 版开始不推荐使用:从 4.7.0 开始不再使用此设置,因为 MySQL 根据主机决定连接类型,因此可能会导致意外结果。”参考:docs.phpmyadmin.net/en/latest/config.html
  • “真正的解决办法”是阅读和理解 MySQL 文档,然后编辑您的配置文件并拥有一个您知道发生了什么的系统,而不是仅仅遵循一些建议并很快忘记一切因为它正在工作。如果您想使用localhost,您必须配置 MySQL 以侦听套接字而不是 TCP/IP。当你的数据库在同一台机器上时,我总是建议这样做。
  • 非常感谢。我被困了一段时间。没想到问题这么小。
  • 如果我的 MySQL 服务器托管在不同的 IP 上,例如“64.233.191.255”,我该怎么办?我有我的 MySQL bind=64.233.191.255 ,在我的 config-db.php 文件中,我有: $dbserver='64.233.191.255'; (无论如何我都尝试了您的解决方案,但仍然出现错误)。我正在尝试让 phpmyadmin 4:4.9.5+dfsg1-2 在 Ubuntu 20.04 上运行
【解决方案2】:

This 为我工作。

定位config.sample.inc.php

改变

$cfg['Servers'][$i]['host'] = 'localhost';

进入

$cfg['Servers'][$i]['host'] = '127.0.0.1';

保存。

然后重命名文件并从名称中删除 sample

【讨论】:

    【解决方案3】:

    我在尝试这个

    cd /opt/lampp/phpmyadmin
    

    然后

    gedit config.inc.php
    

    找到这个

    $cfg['Servers'][$i]['host'] = 
    

    如果有localhost,改成127.0.0.1

    注意:如果$cfg['Servers'][$i]['host']之前有'//'删除//

    我又查了http://localhost/phpmyadmin/

    Mysqli 说:

    "phpMyAdmin 尝试连接 MySQL 服务器,而服务器 拒绝连接。您应该检查主机、用户名和 配置中的密码并确保它们对应于 MySQL服务器管理员提供的信息。”

    我又打开了config.inc.php,我发现了

    $cfg['Servers'][$i]['password'] =
    

    用你的密码填写密码

    它对我有用。它也可能对你有用。

    【讨论】:

    • 为我节省了很多时间
    • 截至 2018 年 10 月,MAMP 路径应为 /Applications/MAMP/bin/phpMyAdmin/config.inc.php。它就像魅力:-)
    【解决方案4】:

    可能您的 SQL 服务器已停止

    sudo /etc/init.d/mysql start
    

    sudo service mysqld start
    

    并使用service mysql status查看状态

    编辑从 cmets 添加:

    用途:

    sudo systemctl enable mysql 
    

    继续运行 MySQL。

    【讨论】:

    • 服务mysqld重启
    • 它对我有用,但最大的问题是它为什么停止了?因为我经常遇到这种情况。
    • @Komi 使用sudo systemctl enable mysql 继续运行 MySQL。这么晚才回复很抱歉。我完全错过了。
    【解决方案5】:

    mysqli_connect(): (HY000/2002): 没有那个文件或目录

    背景:

    我只是想使用终端在我的 Mac 上运行一些 PHPUnit 测试。 我想测试的一些类必须连接由 PHPMyAdmin 创建和管理的 MySQL DB,而我正在使用的 Web 应用程序在 localhost 中运行良好。因此,当我运行该测试用例时,我的终端上出现以下错误:

    mysqli_connect(): (HY000/2002): No such file or directory
    

    解决办法:

    因此,我不得不解决它并运行我的测试,我搜索了几个 SO Q&A 线程并进行了尝试。一系列变化对我有用。

    1. 找到与 PHPMyAdmin 相关的 config.inc.php 文件。
    2. 找到$cfg['Servers'][$i]['host']这一行,这行可能默认已被注释掉,如果是,请取消注释。
    3. 并将该行替换为以下内容:

    $cfg['Servers'][$i]['host'] = '127.0.0.1';

    1. 保存并从 XAMPP 控制面板 (manager-osx) 重新启动 MySQL 数据库。
    2. mysqli_connect() 方法中的$host 参数值更改为:

    $_connection = mysqli_connect(**"localhost: 3306"**, $_mysql_username, $_mysql_password, $_database);

    注意: 3306 是我的 MySQL 端口号,它是默认的。在执行这些步骤之前,您最好检查一下您的实际 MySQL 端口号。

    仅此而已。对我来说,只有这组步骤有效,没有别的。我运行了我的单元测试,它工作正常,并且数据库数据也根据测试正确更新。

    为什么会这样:

    我能找到的最接近的原因是它可以工作,因为有时mysqli_connect 方法需要数据库的工作套接字(数据库主机的 IP 地址以及端口号)。因此,如果您已注释掉 $cfg['Servers'][$i]['host'] = '127.0.0.1'; 行或将 'localhost' 设置为其中的值,它将忽略端口号。但是如果你想使用套接字,那么你必须使用 '127.0.0.1' 或真实的主机名。 (对我来说,这似乎与我们真正拥有的默认端口号无关,我们必须执行上述步骤。)阅读以下link of PHPMyAdmin 了解更多详细信息。

    希望这可能对其他人有所帮助。

    干杯!

    【讨论】:

      【解决方案6】:

      我今天使用以下步骤解决了这个问题:

      1. 如果 config.inc.php 在 phpMyadmin 目录中不存在 将 config.sample.inc.php 复制到 config.inc.php。

      2. 将套接字添加到/* Server parameters */

        $cfg['Servers'][$i]['socket'] = '/tmp/mysql.sock';
        
      3. 保存文件,通过url访问phpmyadmin。

      如果您使用的是 mysql 8.0.12,您应该使用旧密码加密,因为 php 客户端不支持强加密。

      【讨论】:

      • 绝对是 macOS 用户的最佳答案!
      • 在使用从 HOMEBREW 安装的 php 和 httpd 时,我必须使用旧版密码加密才能使其工作,然后再使用 Macos Catalina 的本机 PHP 和 httpd 我不需要更改它,所以当我重新安装时自制的 PHP 和 HTTPD 我失去了连接...感谢您的回答
      【解决方案7】:

      首先,确保mysql服务正在运行:

      ps elf|grep mysql
      

      如果正在运行,您将看到如下输出:

      4 S root      9642     1  0  80   0 -  2859 do_wai 23:08 pts/0    00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/tomcat-machine.local.pid
      4 S mysql     9716  9642  0  80   0 - 200986 poll_s 23:08 pts/0   00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/tomcat-machine.local.err --pid-file=/var/lib/mysql/tomcat-machine.local.pid
      

      然后在config.inc.php中将localhost改成127.0.0.1

      $cfg['Servers'][$i]['host'] = '127.0.0.1';
      

      “root”用户的默认密码为空“”密码不要输入任何内容

      如果不允许空密码,则需要再次编辑config.inc.php并更改:

      $cfg['Servers'][$i]['AllowNoPassword'] = true;
      

      问题是配置设置和 MySQL 未运行的组合。这就是帮助我修复此错误的原因。

      【讨论】:

        【解决方案8】:

        试试吧

        sudo service mysql restart
        

        它对我有用

        【讨论】:

          【解决方案9】:

          我在 CentOS 上遇到过这个问题。

          我先试试这个

          sudo service mysql restart
          

          然后出现错误

          Redirecting to /bin/systemctl restart mysql.service
          Failed to restart mysql.service: Unit not found.
          

          然后我找到this

          这个命令解决了我的问题

          systemctl start mariadb.service
          

          【讨论】:

            【解决方案10】:

            如果您使用的是 archlinux 或 Ubuntu,只需键入以下命令:

            cd /opt/lampp/phpmyadmin
            

            然后

            sudo gedit config.inc.php
            

            然后,当您访问该文件时,请查找下面的脚本,

            //$cfg['Servers'][$i]['host'] ='localhost'
            

            删除'//',使其保持如下所示:

            $cfg['Servers'][$i]['host'] ='localhost'
            

            然后将 'localhost' 更改为 '127.0.0.1' 脚本应如下图所示:

            $cfg['Servers'][$i]['host'] ='127.0.0.1'
            

            返回浏览器并输入http://127.0.0.1/phpmyadmin/

            如果还是拒绝

            您应该检查您的配置中的主机、用户名和密码,并确保它们与 MySQL 服务器管理员提供的信息相对应。

            然后返回到您正在编辑的同一文件 config.inc.php 并执行以下操作:

            cd /opt/lampp/phpmyadmin
            

            然后

            sudo gedit config.inc.php
            

            搜索下面的脚本

            $cfg['Servers'][$i]['password'] =''
            

            用你的root密码填写密码

            $cfg['Servers'][$i]['password'] ='your_password'
            

            它应该可以工作。

            【讨论】:

              【解决方案11】:

              如果您的网站运行良好但现在出现意外错误(HY000/2002): No such file or directory

              那么您应该不要更改任何配置文件!

              首先检查服务器 error.log 文件,对于 Nginx,它位于:

              /var/log/nginx/error.log
              

              或者对于 Apache 试试:

              /var/log/apache2/error_log
              

              在我的例子中,我可以在 nginx 的 error.log 中看到 PHP 致命错误:内存不足

              解决方案:向服务器添加更多 RAM。


              我尝试在升级/添加 RAM 之前先重新启动 Web 服务器。 然后我摆脱了ERROR (HY000/2002) but got some ERROR 50X: Connection Error...

              此时我添加了 2GB RAM,重新启动了网络服务器,一切正常!

              当网络服务器启动时,我注意到 200 多个 cron-jobs 由于 1 个 PHP 脚本中的循环错误而被卡住。

              所以检查哪个脚本正在消耗内存。

              【讨论】:

                【解决方案12】:

                我遇到了同样的问题。在我的/etc/mysql/my.cnf 中,没有定义更多到mysqld.sock 的路径。所以我开始搜索:find / -type s | grep mysqld.sock,但找不到。 我重新安装了mysql:apt install mysql-server-5.7(请在执行当前sql-server-version之前检查)。

                这解决了我的问题。

                【讨论】:

                  【解决方案13】:
                  mysqli_connect(): (HY000/2002): No such file or directory
                  

                  我在 debian9 VM 上遇到了同样的问题,我尝试重新启动 MySQL,但它没有解决问题,之后我增加了 RAM(我减少了)并且它工作了。

                  【讨论】:

                    【解决方案14】:

                    如果您使用的是 SELinux,请检查一下。

                    我遇到了同样的问题。我在执行 SELinux 的情况下运行 CentOS 8,尽管正确修复了所有配置,但我收到了问题 (mysqli_real_connect(): (HY000/2002): No such file or directory) 中提到的错误。在允许通过 SELinux 连接 MySQL 后,我后来摆脱了麻烦。

                    使用此命令检查 SELinux 状态:

                    sestatus
                    

                    允许Apache通过SELinux连接数据库

                    setsebool httpd_can_network_connect_db 1
                    

                    使用-P 选项使更改永久化。如果没有此选项,布尔值将在重新启动时重置为 0。

                    setsebool -P httpd_can_network_connect_db 1
                    

                    【讨论】:

                      【解决方案15】:

                      如果您使用 Mac OS 和 Brew,请尝试以下操作:

                      mkdir /usr/local/etc/my.cnf.d
                      

                      【讨论】:

                        【解决方案16】:

                        在 linux 中就可以了

                        sudo systemctl stop mysql
                        
                        sudo systemctl start mysql
                        

                        为我工作

                        【讨论】:

                        • 这个答案在上面的多个帖子中已经有 +1 > 点
                        【解决方案17】:

                        如果上述解决方案不起作用,请尝试将默认端口从 3306 更改为另一个(即 3307)

                        【讨论】:

                        • 这肯定与端口无关
                        【解决方案18】:

                        您只需将 ib_logfile0 和 ib_logfile1 重命名为 ib_logfile_0 和 ib_logfile_1。那么你的问题就迎刃而解了。

                        【讨论】:

                        • 这完全不相关。
                        • 您的回答与问题无关。重命名日志文件不会帮助 mysqli 找到一个套接字或连接到 MySQL 服务器。如果我们误解了您的答案,您可能需要更新它,否则删除此答案会更好。请阅读how to answer 指南。
                        猜你喜欢
                        • 1970-01-01
                        • 2020-05-07
                        相关资源
                        最近更新 更多