【问题标题】:SQLSTATE[HY000] [2002] No such file or directory [duplicate]SQLSTATE [HY000] [2002]没有这样的文件或目录[重复]
【发布时间】:2014-04-06 22:29:00
【问题描述】:

我正在尝试在 OS X 上运行一个 laravel 项目。我用自制软件安装了 MySql。我试着用谷歌搜索我为什么会收到这个错误:

SQLSTATE[HY000] [2002] No such file or directory

当我尝试做时

php artisan migrate

而且我看到的大多数答案都说 php 和 MySql 无法相互通信。自从我认为我关注了以前的帖子以来,我一直试图找出我哪里出错了,但它仍然不起作用。我创建了一个这样做的页面:

<?php
    phpinfo();
?>

我看到了这些类型的东西: 在配置区域,我看到:

'--with-mysql-sock=/tmp/mysql.sock' '--with-mysqli=mysqlnd' '--with-mysql=mysqlnd' '--with-pdo-mysql=mysqlnd' '--enable-pcntl' '--enable-zend-signals' '--enable-dtrace'

加载的配置文件:

/usr/local/etc/php/5.4/php.ini

如果我ls /tmp,我确实看到了 mysql.sock。

在那个 php.ini 文件中,我设置了这些行: pdo_mysql.default_socket=/tmp/mysql.sock mysql.default_socket = /tmp/mysql.sock mysqli.default_socket = /tmp/mysql.sock

然后在 /usr/local/Cellar/mysql/5.6.16/my.cnf 中,我添加了以下行:

socket = /tmp/mysql.sock

我确实重新启动了 apache,并检查了 mysql 是否正在运行。除了 php 和 mysql 连接之外,我还没有看到任何其他建议。我认为我的系统上有两个版本的 php,因为当我安装 mcrypt 或其他我不记得的东西时,它安装了另一个 php 版本。但是当我查看 phpinfo 的输出时,我正在编辑相应的 php.ini 文件。我不知道我是否还缺少另一件作品。有什么想法吗?谢谢

【问题讨论】:

  • 我刚刚通过尝试启用“mysql 常规查询日志”来调试我正在使用的一些学说/php 代码而遇到此错误。
  • 我只需要在 php.ini 中启用 mysqli.so 扩展

标签: php mysql


【解决方案1】:

我遇到了类似的错误。我正在使用 MAMP,解决我的问题的是:

  1. 在:/var/mysql 中创建符号链接(如果目录不存在则创建)
  2. cd /var/mysql && sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock

【讨论】:

  • 这为我解决了问题。我没有使用 MAMP,所以它是 cd /var/mysql && sudo ln -s /tmp/mysql.sock
  • 很高兴它有帮助!
  • @MikeRentas 你刚刚救了我一些理智......我看到的每个参考都在使用 MAMP,我只是手动设置了所有东西——你的是唯一有效的东西,尽管我获得了权限现在出错了。
  • @MikeRentas 您的特殊解决方案非常适合我尝试在 Mac OS X Yosemite 上设置旧版 Symfony 1.4 应用程序。我已经通过 Homebrew 安装了 MariaDB,我猜这会将 mysql.sock 文件放在 /tmp 中。
  • 为我解决了这个问题,但你能解释一下为什么它有效吗?
【解决方案2】:

对于正在寻找 XAMPP 解决方案(在 Mac OS X 上测试和工作)的用户,

打开终端并创建符号链接:

sudo mkdir /var/mysql
cd /var/mysql
sudo ln -s /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock

【讨论】:

  • 您好,我试过了,但没有成功,我收到错误 SQLSTATE[HY000] [2002] Connection refused。我在 Mac OS 上使用苗条的 php 框架,xampp。有什么办法可以解决这个问题?
  • 在连接到数据库时尝试使用“localhost”而不是“127.0.0.1”,反之亦然,看看是否有帮助。
  • 谢谢!现在它适用于localhost。那我应该怎么做才能让它与127.0.0.1 一起工作呢?
  • 我不知道slim php框架,但它可能与你的配置文件有关?
  • 工作就像一个魅力 - 谢谢。 PS 我在 MAMP 中使用它和 MAMP 路径。
【解决方案3】:

我发现 CentOS 6 上的 PHP 是用 mysql.default_socket=/var/lib/mysql/mysql.sock 构建的,但由于某种原因 pdo_mysql.default_socket=/tmp/mysql.sock 不存在。使用--with-mysql-sock=/var/lib/mysql/mysql.sock 构建它应该强制两者相同。

或者编辑 php.ini 以包含:

pdo_mysql.default_socket="/var/lib/mysql/mysql.sock"

...当然是您正确的套接字位置。

【讨论】:

    【解决方案4】:

    经过搜索,我找到了这个帖子:

    Setting up Laravel on a Mac php artisan migrate error: No such file or directory

    一旦我添加了

    'unix_socket' => '/tmp/mysql.sock’,
    

    到我的mysql数组中的database.php,它起作用了。不知道为什么会这样,但确实如此。

    【讨论】:

      【解决方案5】:

      我这样修复它。只需添加一行。 在 laravel 项目中 APP=>配置=>database.php 更新
      连接=>mysql 严格后添加以下行

      'unix_socket' => "/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock"
      

      样本:-

      'mysql' => [
                  'driver'    => 'mysql',
                  'host'      => env('DB_HOST', 'localhost'),
                  'database'  => env('DB_DATABASE', 'forge'),
                  'username'  => env('DB_USERNAME', 'forge'),
                  'password'  => env('DB_PASSWORD', ''),
                  'charset'   => 'utf8',
                  'collation' => 'utf8_unicode_ci',
                  'prefix'    => '',
                  'strict'    => false,
                  'unix_socket' => "/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock"
              ],
      

      【讨论】:

      • 我添加到我的 .env DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock
      【解决方案6】:

      这突然发生在我身上,我的应用程序(Laravel)昨天运行良好,今天因这个错误而退出(SQLSTATE [HY000] [2002] 没有这样的文件或目录)。

      检查我的配置文件没有损坏后,我连接到我的控制面板(我使用的是 VPS)并重新启动 MySQL 服务器。成功了,一切都恢复了在线。

      【讨论】:

        【解决方案7】:

        为 Ampps 用户找到了解决方案:
        我有同样的问题,我做了很多搜索,但直到我查看了我的 MySql 配置文件才能解决这个问题。 在我的配置文件中,套接字位于第 21 行,路径为
        "/Applications/AMPPS/var/mysql.sock"

        在 Ampps 应用程序中单击 MySql 选项卡,然后单击配置按钮。

        您也可以在“/Applications/AMPPS/mysql/etc”文件夹中找到配置文件

        所以我添加了
        'unix_socket' => '/Applications/AMPPS/var/mysql.sock',
        到我的mysql数组中的database.php,它对我有用。
        主机线后。我已经用 localhost 和 127.0.0.1 进行了测试,并且都有效
        希望它也对你有用。

        【讨论】:

          猜你喜欢
          • 2020-05-07
          • 2015-06-24
          相关资源
          最近更新 更多