PDOException SQLSTATE 没有这样的文件或目录

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

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

在某种程度上,迁移一定是有效的,因为我的桌子在那里 – 但这并不能解释为什么现在不适合我。

该错误消息指示通过套接字的MySQL连接尝试(不支持)。

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

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

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

我有完全相同的问题。 上述解决scheme都不适合我。 我通过将/app/config/database.php文件中的“host”从“localhost”更改为“127.0.0.1”来解决问题。

不知道为什么“本地主机”默认情况下不工作,但我发现这个答案在一个symfony2职位解决类似的问题。 https://stackoverflow.com/a/9251924/1231563

更新:有人问为什么这个修复工程,所以我做了一点点的研究这个话题。 看起来好像他们使用不同的连接types在这篇文章中解释https://stackoverflow.com/a/9715164/1231563

这里出现的问题是“本地主机”使用UNIX套接字,无法在标准目录中find数据库。 然而,“127.0.0.1”使用TCP(传输控制协议),这意味着在这种情况下,通过计算机上的“本地互联网”比UNIX套接字更可靠。

我得到了同样的问题,我正在运行的Mac OS X 10.10优胜美地。 我已经启用了操作系统已经提供的Apache服务器和PHP。 然后我只是configuration了mCrypt库来开始。 之后,当我正在使用模型和数据库我得到了错误:

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

我发现的原因只是因为PHP和MySQL不能自己连接。 为了解决这个问题,我遵循以下步骤:

  1. 打开一个terminal并通过以下方式连接到mysql:

    mysql -u root -p

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

    mysql> show variables like '%sock%'

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

    +-----------------------------------------+-----------------+ | Variable_name | Value | +-----------------------------------------+-----------------+ | performance_schema_max_socket_classes | 10 | | performance_schema_max_socket_instances | 322 | | socket | /tmp/mysql.sock | +-----------------------------------------+-----------------+

  4. 保留最后一行的值:

    /tmp/mysql.sock

  5. 在您的laravel项目文件夹中,查找database.php文件,您可以在其中configuration数据库连接参数。 在mysql部分的末尾添加下一行:

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

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

'mysql' => array( 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'SchoolBoard', 'username' => 'root', 'password' => 'venturaa', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'unix_socket' => '/tmp/mysql.sock', ),

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

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

 pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock 

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

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

 pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock 

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

 pdo_mysql.default_socket => /var/run/mysqld/mysqld.sock => /var/run/mysqld/mysqld.sock 

这为我修好了。

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

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

但后来我有一个“连接被拒绝”的错误。 如果有人有同样的问题,我的解决scheme是更新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' => '', ), 

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

 homestead ssh 

然后简单地cd到正确的目录并在那里激发你的命令。

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

sudo服务mysqld启动

Mamp用户启用选项允许networking访问MYSQL

在这里输入图像描述

像下面的例子一样,在database.php文件中添加mysql.sockpath

 'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock', 

Eample

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

build立在@dcarrith的答案…

我没有编辑configuration文件,而是在PHP所查找的连接到真正的mysql.sock的位置创build了一个别名。 ( 来源 )

只需运行这两个命令(不需要重新启动):

 mkdir /var/mysql ln -s /tmp/mysql.sock /var/mysql/mysql.sock 

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

所以,简单地(一小时后),我添加了两个东西到/config/database.php。

 'port' => '1234', 'unix_socket' => '/path/to/my/socket/mysqld.sock' 

现在正常工作!

步骤1

find你的unix_socket的path,只要运行netstat -ln | grep mysql netstat -ln | grep mysql

你应该得到这样的东西

 unix 2 [ ACC ] STREAM LISTENING 17397 /var/run/mysqld/mysqld.sock 

第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' <----- ), ), 

希望它有帮助!

从Laravel 5开始,数据库用户名和密码保存在项目目录中的.env文件中

 DB_HOST=127.0.0.1 DB_DATABASE=db1 DB_USERNAME=user1 DB_PASSWORD=pass1 

正如你可以看到这些环境variables在这里覆盖“伪造”string,所以改变它们没有任何作用:

  '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, ], 

更多信息在这里https://mattstauffer.co/blog/laravel-5.0-environment-detection-and-environment-variables

当在Elixir / Gulp中运行PHPUnit,以及Homestead作为我的stream浪环境时,我遇到了这个问题。

在我的情况下,我编辑.env文件从DB_HOST=localhostDB_HOST=192.168.10.10其中192.168.10.10是我的stream浪汉/家园主机的IP。

如果你正在使用Laravel Homestead,这里是设置

(包括Vagrant-Virtual Machine)

.bash瞩目

 alias vm="ssh vagrant@127.0.0.1 -p 2222" 

为database.php

  'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', '127.0.0.1'), 'database' => env('DB_DATABASE', 'homestead'), 'username' => env('DB_USERNAME', 'homestead'), 'password' => env('DB_PASSWORD', 'secret'), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, ], 

终奌站

 vm vagrant@homestead:~/Code/projectFolder php artisan migrate:install 

尝试连接到本地主机:

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

尝试连接到127.0.0.1:

 SQLSTATE[HY000] [2002] Connection refused 

好的,只需从my.cnf(在OS X 10.5: /opt/local/etc/mysqlxx/my.cnf )上注释/删除以下设置即可获得:

 [mysqld] # skip-networking 

当然,停止并启动MySQL服务器。

如果有人仍然在寻找答案,只需检查您的.env文件。 出于某种原因laravel创build一个.env.example文件,所以这一切的答案不适合我。 我解决了我的问题重新.env.example .env

这对我来说是正确的回应。 我在我的php.ini中禁用了选项pdo_mysql.default_socket,我在1.27.0.0.1devise主机

当使用VirtualMachine时,确保你ssh进入该机器并导航到你的App文件夹,并从那里调用php artisan migrate命令。

我访问我的drupal网站时遇到了问题,而且我遇到了一个问题,就像我在不到2个小时内修复了这个问题。 尝试在您的命令行并重新启动您的MySQL服务器或服务。 以超级用户或超级用户身份login时input, – service mysqld restart

它应该工作。 如果不重启你的本地networking服务器, – service httpd restart

这应该够了。 希望它也适用于其他环境。 干杯。

在一些情况下,我只是简单地使用

 vagrant up 

代替

 homestead up 

为我的伪造幼虫设置使用家园。 我假设这意味着该网站得到了服务,但MySQL服务器没有启动。 当我用后一个命令启动我的stream浪者箱子时,错误消失了。

所有这些答案似乎是沉重的提升…

我刚创build一个.env文件; 编辑我的bootstrap/app.php文件,并取消注释以下行…

Dotenv::load(__DIR__.'/../');

希望这有助于某人

[这是过时了,数据库信息存储在.env现在]更容易的方法来解决问题正在编辑

 app/config/local/database.php 

🙂

在这里更改数据库configuration,它应该工作

这发生在我身上,因为MySQL没有运行。 MySQL无法启动,因为我有一个/usr/local/etc/my.cnf.d/目录。

这是我的/usr/local/etc/my.cnfconfiguration文件作为glob include( include /usr/local/etc/my.cnf.d/*.cnf )所要求的。

运行mkdir /usr/local/etc/my.cnf.d ,然后启动MySQL,修复了这个问题。

我刚把网站从一台服务器移到另一台服务器上,出现这个错误。

我从@stuyam读取答案,并将主机从空string更改为127.0.0.1,并完美工作。

多年来,我用空string作为主机,没有任何问题。

Interesting Posts