PDOException SQLSTATE [HY000] [2002]没有这样的文件或目录

 阿毛 发布于 2023-02-08 17:29

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

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

在某些时候,迁移必须有效,因为我的桌子在那里 - 但这并不能解释为什么它现在不适合我.

14 个回答
  • 错误消息表明尝试通过套接字连接MySQL(不支持).

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

    2023-02-08 17:31 回答
  • 我正在运行MAMP Pro并且在尝试迁移时遇到类似的问题(创建数据库表).尝试了一些这些提到的建议,但没有为我做.

    所以,简单地说(在一小时谷歌搜索后),我向/config/database.php添加了两件事.

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

    现在工作正常!

    2023-02-08 17:31 回答
  • @stuyam的答案为我解决了"没有这样的文件或目录"的问题

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

    但后来我遇到了"拒绝连接"错误.如果有人有同样的问题,我的解决方案是更新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'    => '',
        ),
    

    2023-02-08 17:31 回答
  • 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帖子中找到了类似问题中的答案./sf/ask/17360801/

    更新: 有人问过为什么这个修复工作正常,所以我对这个主题进行了一些研究.好像他们使用不同的连接类型,如本文所述:/sf/ask/17360801/

    这里出现的问题是"localhost"使用UNIX套接字,无法在标准目录中找到该数据库.但是"127.0.0.1"使用TCP(传输控制协议),这实际上意味着它通过计算机上的"本地Internet"运行,在这种情况下比UNIX套接字更可靠.

    2023-02-08 17:31 回答
  • 它的工作后,我从改变DB_HOST=localhostDB_HOST=127.0.0.1在.ENV文件

    2023-02-08 17:31 回答
  • 步骤1

    找到你的unix_socket的路径,这样就可以了 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' <-----
                ),
            ),
    

    希望能帮助到你 !!

    2023-02-08 17:31 回答
  • 在database.php文件中添加mysql.sock路径,如下例所示

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

    2023-02-08 17:31 回答
  • 这是因为PDO特别对待"localhost"主机:

    注意:仅限Unix:当主机名设置为"localhost"时,通过域套接字与服务器建立连接.如果针对libmysqlclient编译PDO_MYSQL,则套接字文件的位置位于libmysqlclient的编译位置.如果针对mysqlnd编译PDO_MYSQL,则可以通过pdo_mysql.default_socket设置设置默认套接字.

    (来自http://php.net/manual/en/ref.pdo-mysql.connection.php)

    将localhost更改为127.0.0.1将"强制"使用TCP.

    注意:mysqli_connect与localhost一起正常工作.

    2023-02-08 17:31 回答
  • 建立在@dcarrith的答案之上......

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

    只需运行这两个命令(无需重启):

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

    2023-02-08 17:31 回答
  • [PDOException] SQLSTATE[HY000] [2002] No such file or directory出于不同的原因遇到了错误.我刚刚在Ubuntu 12.04上用Apache 2.4.7,PHP v5.5.10和MySQL 5.6.16构建了一个全新的LAMP堆栈.我把我的网站搬回来并将它们解雇了.但是,由于[PDOException]上述原因,我无法加载基于Laravel 4.2.x的站点.所以,我检查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:

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

    这为我解决了这个问题.

    2023-02-08 17:31 回答
  • 如果您使用的是Laravel Homestead,请确保在服务器上调用命令.

    homestead ssh
    

    然后只需cd到正确的目录并在那里激活你的命令.

    2023-02-08 17:31 回答
  • Mamp用户启用选项允许网络访问MYSQL

    在此输入图像描述

    2023-02-08 17:32 回答
  • 我遇到了同样的问题,我正在运行Mac OS X 10.10 Yosemite.我启用了操作系统附带的Apache Server和PHP.然后我只是配置了mCrypt库来开始.在那之后,当我使用模型和DB时,我得到了错误:

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

    我找到的原因仅仅是因为PHP和MySQL无法自己连接.为了解决这个问题,我按照以下步骤操作:

      打开终端并使用以下命令连接到mysql:

      laravel

      它会询问您相关的密码.然后,一旦你得到mysql promt键入下一个命令:

      laravel

      你会得到这样的东西:

      laravel

      保留最后一行的值:

      laravel

      在laravel项目文件夹中,查找database.php文件,您可以在其中配置数据库连接参数.在mysql部分中添加最后一行:

      laravel

      你必须有这样的东西:

    laravel

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

    2023-02-08 17:32 回答
  • 在我的情况下,我没有任何问题,只是忘了启动mysql服务...

    sudo服务mysqld启动

    2023-02-08 17:32 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有