我相信我已经成功地部署了我的(非常基本的)网站到fortrabbit,但只要我连接到SSH运行一些命令(如php artisan migrate或php artisan db:seed),我得到一个错误消息:
[PDOException]
SQLSTATE[HY000] [2002] No such file or directory
在某种程度上,迁移一定是有效的,因为我的表在那里——但这并不能解释为什么它现在不适合我。
我相信我已经成功地部署了我的(非常基本的)网站到fortrabbit,但只要我连接到SSH运行一些命令(如php artisan migrate或php artisan db:seed),我得到一个错误消息:
[PDOException]
SQLSTATE[HY000] [2002] No such file or directory
在某种程度上,迁移一定是有效的,因为我的表在那里——但这并不能解释为什么它现在不适合我。
当前回答
所有现有的答案都是正确的,可能对你有用。 我的情况有点不同。我在本地使用docker-compose up启动一个docker项目时遇到了这个错误。
对于我的特定情况,问题是我从子文件夹运行docker-compose,而不是从docker-compose文件所在的根文件夹运行。
确保从docker-compose所在的文件夹中运行docker-compose。Yml保存到!
其他回答
基于@dcarrith的回答…
我没有编辑配置文件,而是在PHP正在查找的位置中创建了一个别名,该别名连接到真正的mysql.sock。(源)
只需运行这两个命令(不需要重新启动):
mkdir /var/mysql
ln -s /tmp/mysql.sock /var/mysql/mysql.sock
出现这个错误的一个最简单的原因是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文件中的“主机”从“localhost”更改为“127.0.0.1”来解决这个问题。
不知道为什么“localhost”默认不工作,但我在symfony2帖子中找到了一个类似问题的答案。https://stackoverflow.com/a/9251924
更新: 有些人问为什么这个修复工作,所以我对这个主题做了一些研究。似乎他们使用不同的连接类型,解释在这篇文章https://stackoverflow.com/a/9715164
这里出现的问题是“localhost”使用UNIX套接字,无法在标准目录中找到数据库。但是“127.0.0.1”使用TCP(传输控制协议),这本质上意味着它在您的计算机上通过“本地互联网”运行,在这种情况下比UNIX套接字更可靠。
我在访问Drupal网站时也遇到了类似的问题。我通过打开命令行,重新启动我的MySQL服务器或服务来修复它:
service mysqld restart
这应该有用。如果没有,重启你的本地web服务器:
service httpd restart
这应该足够了。希望它也适用于其他环境。注意,这些命令通常需要超级用户权限。
我在Elixir/Gulp和Homestead中运行PHPUnit时遇到了这个问题。
在我的例子中,我将.env文件从DB_HOST=localhost编辑为DB_HOST=192.168.10.10,其中192.168.10.10是我的Vagrant/Homestead主机的IP。
添加mysql。袜子路径在database.php文件如下示例
'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'),