PDOException SQLSTATE[HY000] [2002] 没有这样的文件或目录
PDOException SQLSTATE[HY000] [2002] 没有这样的文件或目录
我相信我已经成功地将我的(非常基本的)网站部署到fortrabbit,但是一旦我连接到SSH来运行一些命令(例如php artisan migrate
或php artisan db:seed
),我会收到一个错误消息:
[PDOException] SQLSTATE[HY000] [2002] No such file or directory
在某个时候迁移一定是成功的,因为我的表已经存在 - 但这不解释为什么它现在对我不起作用。
错误信息指示尝试通过套接字进行MySQL连接(该方法不受支持)。
在Laravel(artisan)的上下文中,您可能需要使用不同的/正确的环境。例如:php artisan migrate --env=production
(或任何其他环境)。请参见此处。
导致此错误的最简单的原因之一就是MySQL服务器未运行。首先进行验证。如果MySQL服务器已经启动,那么可以尝试以下建议:
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帖子中找到了这个答案。链接: https://stackoverflow.com/a/9251924
更新: 一些人询问为什么这样的修复方案能够解决问题,因此我做了一些研究。据我了解,它们使用了不同的连接类型,如这篇文章所解释的:https://stackoverflow.com/a/9715164
这里出现的问题是,"localhost"使用UNIX套接字(socket),不能在标准目录中找到数据库。然而,"127.0.0.1"使用TCP(传输控制协议),在这种情况下,它在计算机的“本地网络”上运行,比UNIX套接字更可靠。