我相信我已经成功地部署了我的(非常基本的)网站到fortrabbit,但只要我连接到SSH运行一些命令(如php artisan migrate或php artisan db:seed),我得到一个错误消息:

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

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


当前回答

基于@dcarrith的回答…

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

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

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

其他回答

我在docker_compose中使用Docker和MySQL服务名db时遇到了同样的问题。yml文件:

我在.env文件中添加了以下内容:

DB_HOST=db

您还应该确保可以从PHP应用程序中发现您的主机。

这是因为PHP没有弄清楚使用哪个主机来连接。

我在ubuntu 18.04的nginx中遇到了同样的问题。通过以下步骤,我的问题已经解决:

首先打开终端,进入mysql CLI。要检查mysql套接字的位置,我写下面的命令。

mysql> show variables like '%sock%'

我得到了如下内容:

+-----------------------------------------+-----------------------------+
| Variable_name                           | Value                       |
+-----------------------------------------+-----------------------------+
| mysqlx_socket                           | /var/run/mysqld/mysqlx.sock |
| performance_schema_max_socket_classes   | 10                          |
| performance_schema_max_socket_instances | -1                          |
| socket                                  | /var/run/mysqld/mysqld.sock |
+-----------------------------------------+-----------------------------+
4 rows in set (0.00 sec)

在laravel项目文件夹中,在config文件夹中查找database.php文件。在mysql部分,我根据上表修改了unix_socket。

'mysql' => array(
        'driver'    => 'mysql',
        'host'      => '127.0.0.1',
        'database'  => 'database_name',
        'username'  => 'username',
        'password'  => 'password',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'unix_socket' => '/var/run/mysqld/mysqld.sock',
    ),

现在只需保存更改,并重新加载页面,它就工作了。

我在Elixir/Gulp和Homestead中运行PHPUnit时遇到了这个问题。

在我的例子中,我将.env文件从DB_HOST=localhost编辑为DB_HOST=192.168.10.10,其中192.168.10.10是我的Vagrant/Homestead主机的IP。

我的答案是针对Laravel的。

在database.php配置文件中创建到本地Docker MySQL服务的新连接并将其设置为默认连接后,我收到了这条消息。我忘记了我通过在模型中覆盖它来设置一个不同的连接:

class Model extends \Illuminate\Database\Eloquent\Model
{
    protected $connection;

    public function __construct(array $attributes = [])
    {
        parent::__construct($attributes);
        $this->connection = 'some_other_connection';
    }
...

因此,即使我在database.php文件中的默认连接指向正确的凭据,模型仍然使用我从本地环境文件中删除的远程数据库连接配置。

尝试连接到本地主机:

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服务器。