PDOException SQLSTATE [HY000] [2002]没有这样的文件或目录

Dan*_*nds 280 php mysql pdo laravel

我相信我已成功将我的(非常基本的)站点部署到fortrabbit,但是一旦我连接到SSH运行一些命令(例如php artisan migratephp artisan db:seed),我收到一条错误消息:

[PDOException]
SQLSTATE[HY000] [2002] No such file or directory
Run Code Online (Sandbox Code Playgroud)

在某些时候,迁移必须有效,因为我的桌子在那里 - 但这并不能解释为什么它现在不适合我.

stu*_*yam 611

Laravel 4:app/config/database.php文件中的"host" 从"localhost"更改为"127.0.0.1"

Laravel 5:.env文件中的"DB_HOST" 从"localhost"更改为"127.0.0.1"

我有同样的问题.上述解决方案均不适合我.我通过将/app/config/database.php文件中的"host"从"localhost"更改为"127.0.0.1"来解决了这个问题.

不确定为什么"localhost"默认不起作用,但我在symfony2帖子中找到了类似问题中的答案./sf/answers/647634711/

更新: 有人问过为什么这个修复工作正常,所以我对这个主题进行了一些研究.好像他们使用不同的连接类型,如本文所述:/sf/answers/680061511/

这里出现的问题是"localhost"使用UNIX套接字,无法在标准目录中找到该数据库.但是"127.0.0.1"使用TCP(传输控制协议),这实际上意味着它通过计算机上的"本地Internet"运行,在这种情况下比UNIX套接字更可靠.

  • 我想知道为什么`localhost`不起作用,`127.0.0.1`呢? (24认同)
  • `如果您没有指定主机名,或者您指定了特殊主机名localhost,则使用Unix套接字文件.http://dev.mysql.com/doc/refman/5.7/en/can-not-connect-到server.html (9认同)
  • 这对我在命令行(终端)上运行php文件的MAMP系统起作用.它作为一个网页,但不是作为命令行文件,直到我将localhost更改为'127.0.0.1' (6认同)
  • 奇怪,它也是我的解决方案,但我能够从命令行与mysql --host = localhost连接 - 这是有效的,但不是从PDO. (3认同)
  • @Justin我认为这是因为localhost尝试使用套接字,而127.0.0.1使用TCP。 (2认同)

小智 122

错误消息表明尝试通过套接字连接MySQL(不支持).

在Laravel(工匠)的背景下,您可能想要使用不同的/正确的环境.例如:( php artisan migrate --env=production或任何环境).看到这里.

  • 这是我的问题的解决方案,我们公司的一位开发人员不使用 Homestead 并通过套接字连接到 mysql。我删除了 app/database.php 文件中的套接字配置。问题解决了 (2认同)
  • 我必须将“'unix_socket'=>'/Applications/MAMP/tmp/mysql/mysql.sock'”添加到config / database.php (2认同)

ale*_*aio 85

我遇到了同样的问题,我正在运行Mac OS X 10.10 Yosemite.我启用了操作系统附带的Apache Server和PHP.然后我只是配置了mCrypt库来开始.在那之后,当我使用模型和DB时,我得到了错误:

[PDOException]
SQLSTATE[HY000] [2002] No such file or directory
Run Code Online (Sandbox Code Playgroud)

我找到的原因仅仅是因为PHP和MySQL无法自己连接.为了解决这个问题,我按照以下步骤操作:

  1. 打开终端并使用以下命令连接到mysql:

    laravel

  2. 它会询问您相关的密码.然后,一旦你得到mysql promt键入下一个命令:

    laravel

  3. 你会得到这样的东西:

    laravel

  4. 保留最后一行的值:

    laravel

  5. 在laravel项目文件夹中,查找database.php文件,您可以在其中配置数据库连接参数.在mysql部分中添加最后一行:

    laravel

  6. 你必须有这样的东西:

laravel

现在只需保存更改,并重新加载页面,它必须工作!我希望它可能有用!

  • 这解决了OSX 10.10对我的问题+1. (3认同)
  • 最"直截了当"的解决方案.Thanx,这使我在使用MAMP pro运行Laravel (2认同)

dca*_*ith 48

[PDOException] SQLSTATE[HY000] [2002] No such file or directory出于不同的原因遇到了错误.我刚刚在Ubuntu 12.04上用Apache 2.4.7,PHP v5.5.10和MySQL 5.6.16构建了一个全新的LAMP堆栈.我把我的网站搬回来并将它们解雇了.但是,由于[PDOException]上述原因,我无法加载基于Laravel 4.2.x的站点.所以,我检查php -i | grep pdo并注意到这一行:

pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock
Run Code Online (Sandbox Code Playgroud)

但是,在我的/etc/my.cnf中,sock文件实际上是在/var/run/mysqld/mysqld.sock.

所以,我打开了我的php.ini并设置了值pdo_mysql.default_socket:

pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock
Run Code Online (Sandbox Code Playgroud)

然后,我重新启动了apache并检查php -i | grep pdo:

pdo_mysql.default_socket => /var/run/mysqld/mysqld.sock => /var/run/mysqld/mysqld.sock
Run Code Online (Sandbox Code Playgroud)

这为我解决了这个问题.

  • 这有助于我找到我的问题 - 这是我使用OSX捆绑的php,而不是MAMP php二进制文件.因此,请确保您使用的是正确版本的php,指向正确的php.ini等.确定"doh!" 时刻. (2认同)

小智 41

@stuyam的答案为我解决了"没有这样的文件或目录"的问题

简答:将/app/config/database.php文件中的"host"从"localhost"更改为"127.0.0.1"

但后来我遇到了"拒绝连接"错误.如果有人有同样的问题,我的解决方案是更新app/config/local/database.php文件,使端口为8889:

'mysql' => array(
        'driver'    => 'mysql',
        'host'      => '127.0.0.1',
        'port'      => '8889',
        'database'  => 'databaseName',
        'username'  => 'root',
        'password'  => 'root',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),
Run Code Online (Sandbox Code Playgroud)

  • 在我的情况下,它是''port'=>'33060',但这个答案让我在那里! (4认同)

Koe*_* B. 24

如果您使用的是Laravel Homestead,请确保在服务器上调用命令.

homestead ssh
Run Code Online (Sandbox Code Playgroud)

然后只需cd到正确的目录并在那里激活你的命令.

  • 这行得通,我从我的计算机运行命令而不是 ssh 首先进入 VM 并在那里运行命令。 (2认同)

Geo*_*ohn 18

Mamp用户启用选项允许网络访问MYSQL

在此输入图像描述


Car*_*ABS 17

在我的情况下,我没有任何问题,只是忘了启动mysql服务...

sudo服务mysqld启动


Rav*_*ila 16

在database.php文件中添加mysql.sock路径,如下例所示

'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
Run Code Online (Sandbox Code Playgroud)

Eample

'mysql' => [
        'driver' => 'mysql',
        'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '8889'),
Run Code Online (Sandbox Code Playgroud)


Tho*_*aux 14

这是因为PDO特别对待"localhost"主机:

注意:仅限Unix:当主机名设置为"localhost"时,通过域套接字与服务器建立连接.如果针对libmysqlclient编译PDO_MYSQL,则套接字文件的位置位于libmysqlclient的编译位置.如果针对mysqlnd编译PDO_MYSQL,则可以通过pdo_mysql.default_socket设置设置默认套接字.

(来自http://php.net/manual/en/ref.pdo-mysql.connection.php)

将localhost更改为127.0.0.1将"强制"使用TCP.

注意:mysqli_connect与localhost一起正常工作.


NuO*_*One 14

它的工作后,我从改变DB_HOST=localhostDB_HOST=127.0.0.1在.ENV文件

  • 这行得通,您是对的。您是否有任何想法解释为什么`localhost`不起作用? (2认同)

Jus*_*tin 11

建立在@dcarrith的答案之上......

我没有编辑配置文件,而是在PHP看起来连接到真正的mysql.sock的位置创建了一个别名.(来源)

只需运行这两个命令(无需重启):

mkdir /var/mysql
ln -s /tmp/mysql.sock /var/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)


kyo*_*kyo 11

步骤1

找到你的unix_socket的路径,这样就可以了 netstat -ln | grep mysql

你应该得到这样的东西

unix  2      [ ACC ]     STREAM     LISTENING     17397    /var/run/mysqld/mysqld.sock
Run Code Online (Sandbox Code Playgroud)

第2步

把它添加到你的unix_socket参数中

'mysql' => array(
            'driver'    => 'mysql',
            'host'      => '67.25.71.187',
            'database'  => 'dbname',
            'username'  => 'username',
            'password'  => '***',
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'unix_socket'    => '/var/run/mysqld/mysqld.sock' <-----
            ),
        ),
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你 !!


Rin*_*ani 9

我只是在 .env 文件中做了一处更改

我有以下代码行。

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=root
DB_PASSWORD=
Run Code Online (Sandbox Code Playgroud)

将主机名 localhost 更改为 127.0.0.1

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=root
DB_PASSWORD=
Run Code Online (Sandbox Code Playgroud)

这对我来说是有效的,因为找不到像 localhost 这样的主机名

更改主机名后写入以下命令

php artisan config:clear
php artisan migrate:install
php artisan migrate
Run Code Online (Sandbox Code Playgroud)


ano*_*raq 7

我正在运行MAMP Pro并且在尝试迁移时遇到类似的问题(创建数据库表).尝试了一些这些提到的建议,但没有为我做.

所以,简单地说(在一小时谷歌搜索后),我向/config/database.php添加了两件事.

'port' => '1234',
'unix_socket' => '/path/to/my/socket/mysqld.sock'
Run Code Online (Sandbox Code Playgroud)

现在工作正常!


Lan*_*ano 6

当我使用 docker 容器运行我的应用程序时,我遇到了这个问题。

解决方案是将我使用的 MySQL 服务容器的名称docker_compose.yml放在 DB_HOST 上。就我而言,它是db

DB_HOST=db
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。


归档时间:

查看次数:

415736 次

最近记录:

6 年,1 月 前