Yii2中的SQLSTATE[HY000] [2002]错误:找不到文件或目录。

17

我使用的是 ubuntu 16.04.
PHP 版本为 7.0.4-7ubuntu2.
Apache/2.4.18 (Ubuntu) .
PHP 扩展: mysqli (在phpmyadmin中编写)。

我将我的ubuntu从15.10升级到16.04,然而出现了以下错误:

我的项目可以在服务器上正确运行,但在我的操作系统中无法运行:

Database Exception – yii\db\Exception
SQLSTATE[HY000] [2002] No such file or directory
↵
Caused by: PDOException
SQLSTATE[HY000] [2002] No such file or directory

in /var/www/html/iicitySite/vendor/yiisoft/yii2/db/Connection.php at line 579

请尝试访问以下链接:https://dev59.com/e2Ij5IYBdhLWcg3wBAy5 - Web Artisan
我遇到了这个问题,问题是数据库服务器(mysql)没有运行。 - Slim Fadi
2
你是否使用过本地主机?如果是的话,请尝试将“localhost”更改为“127.0.0.1”作为你的主机。 - vijay nathji
@vijaynathji 这在我的 Mac 上也发生过。 - Ibrahim.H
9个回答

66

将主机名从"localhost"更改为"127.0.0.1"

return [
    'components' => [
        'db' => [
            'class' => 'yii\db\Connection',    
            'dsn' => 'mysql:host=127.0.0.1;dbname=abc',
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
        ],

1
如果您使用标准的Yii2 docker-compose.yml,则您的DNS必须是mysql:host=mysql;dbname=abc - Aleksej_Shherbak

8
对于MAMP用户的解决方案是:
'components' => [
    'db' => [
        'class' => 'yii\db\Connection',
        'dsn' => 'mysql:host=localhost;port=8889;dbname=mydbname;unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock',
        'username' => 'myuser',
        'password' => 'mypassword',
        'charset' => 'utf8',
    ],
],

3
希望这个答案能帮到您:
将主机名从“localhost”更改为“127.0.0.1”。
此项更改位于backend\common\config\main-local.php中。
现在您可以运行“php yii migrate”。
希望它可以成功地在数据库中创建表格。

1
我也遇到了同样的问题。更改localhost并没有解决我的问题。相反,您需要像这样添加您的数据库端口:
'dsn'=>'mysql:host=localhost:3307;dbname=geep'

1
如果您使用MAMP,请不要在MAC OS中使用“php”命令,而是在MAMP中使用“php”,例如/Applications/MAMP/bin/php/php5.6.30/bin/php yii migrate

1
我在MAMP环境下运行,并且使用上述两种解决方案都可以正常工作。
1. 将localhost更改为127.0.0.1 2. 保持为localhost,并定义mysql端口,即使使用默认端口(localhost:3306

1

对于 PHP 7.2.24-0ubuntu0.18.04.3 版本,

  • 获取 MySQL 的 socket 路径
  • 将 socket 信息添加到 yii2 的数据库配置中

要获取 socket 路径,请登录 MySQL 并执行以下步骤。

  • Open Terminal and perform following steps

    mysql -u root -p
    mysql> show variables like '%sock%';
    +-----------------------------------------+------------------------------------------------------+
    | Variable_name                           | Value                                                |
    +-----------------------------------------+------------------------------------------------------+
    | mysqlx_socket                           | /tmp/mysqlx.sock                                     |
    | performance_schema_max_socket_classes   | 10                                                   |
    | performance_schema_max_socket_instances | -1                                                   |
    | socket                                  | /opt/packages/lampstack-7.3.9-0/mysql/tmp/mysql.sock |
    +-----------------------------------------+------------------------------------------------------+
    4 rows in set (0.00 sec)
    exit
    
  • Next add following config information

    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:unix_socket=/opt/packages/lampstack-7.3.9-0/mysql/tmp/mysql.sock;dbname=basketmantra',
    'username' => 'root',
    'password' => 'root123',
    'charset' => 'utf8',
    
我希望这能有所帮助。
在某些情况下,您可能会使用httpd、apache或lampp,然后还要确保在终端中检查的php和mysql命令与Web服务器使用的版本相同。
在Web服务器中使用phpinfo()有助于找出Web服务器正在使用的版本。
    <?php
        phpinfo();
    ?>

命令

    $ type php
    php is hashed (/usr/bin/php)

    $ type mysql
    mysql is /opt/packages/lampstack-7.3.9-0/mysql/bin/mysql

0
在我的情况下,我将我的设置运行在Docker中。我遇到了相同的错误信息,并且不得不在Docker内部运行迁移命令。
docker exec -it <container ID> bash
cd app
php yii migrate

0
使用 yii2,我的解决方案是在 common/main-local.php 中注释代码 由于某些原因,yii2 尝试在生产环境中获取 main-local.php 而不是 common 文件夹中的 main.php,但当它被注释时就可以工作(在 common/main.php 获取 DB 配置)
<?php
// common/main-local.php
return [
 /*  'components' => [
       'db' => [
           'class' => 'yii\db\Connection',
           'dsn' => 'mysql:host=172.17.0.2;dbname=ememariadb',
           'username' => 'dbsenha',
           'password' => 'dbUser',
           'charset' => 'utf8',
       ],
   ],*/
];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接