【问题标题】:CakePHP: No such file or directory (trying to connect via unix:///var/mysql/mysql.sock)CakePHP:没有这样的文件或目录(试图通过 unix:///var/mysql/mysql.sock 连接)
【发布时间】:2011-04-27 10:47:54
【问题描述】:

我有一个 cakephp 应用程序在我的本地计算机 (mac osx) 上运行良好一段时间,然后突然我意识到我无法连接到 mysql.sock。

我收到此错误:

Warning (2): mysql_connect() [http://php.net/function.mysql-connect]: [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock) [CORE/cake/libs/model/datasources/dbo/dbo_mysql.php, line 540]

dbo_mysql.php 的第 540 行内容如下:

$this->connection = mysql_connect($config['host'] . ':' . $config['port'], $config['login'], $config['password'], true);

我检查过,没有文件//var/mysql/mysql.sock。它实际上在 /tmp/mysql.sock

我尝试更改我的 php.ini.default 以匹配上述内容,但它已经设置为在 /tmp/ 中查找本地连接。为什么,错误来自哪里?

有没有人遇到过类似的错误?

谢谢,

琼斯

【问题讨论】:

  • 试试127.0.0.1而不是localhost
  • 在哪里?访问应用程序?在 php.ini 文件中?
  • $config['host'] = '127.0.0.1'。如果您使用localhost,mysql 默认使用本地 unix 域套接字。切换到 IP 会强制它使用 TCP 套接字。
  • 您好!有点烦是不是!现在当我将项目上传到网络服务器时,我将不得不更改那段代码:(谢谢!
  • 请您提交您的评论作为答案,以便我查看:D

标签: php mysql cakephp mysql-error-2002


【解决方案1】:

如果您在使用 CakePHP 2.0 时遇到问题,请尝试以下操作:

sudo mkdir /var/mysql
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock

【讨论】:

  • 也适用于 CakePHP 1.3,也适用于带有 sudo ln -s /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock /var/mysql/mysql.sock 的 Xampp
【解决方案2】:

在 phpcake 2.0 中使用 'unix_socket' 而不是端口

<?php
    class DATABASE_CONFIG {
        var $default = array(
            'datasource' => 'Database/Mysql',
            'persistent' => false,
            'host' => 'localhost',
            'login' => 'dbUser',
            'password' => 'dbPassword',
            'database' => 'dbName',
            'prefix' => '',
            'unix_socket' => '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock', //Path for mac XAMPP
        );
    }

【讨论】:

    【解决方案3】:

    尝试在APP/config/database.php中传递mysql.sock文件的绝对路径

    <?php
        class DATABASE_CONFIG {
            var $default = array(
                'driver' => 'mysql',
                'persistent' => false,
                'host' => 'localhost',
                'login' => 'dbUser',
                'password' => 'dbPassword',
                'database' => 'dbName',
                'prefix' => '',
                'port' => '/path/to/mysql.sock'
            );
        }
    

    这比通过 ip 运行本地连接要好,因为套接字连接要快得多。

    【讨论】:

    • 这适用于 CakePHP 直到 1.3 版本。对于 2.0 及更高版本,请参阅下面 Kent Widman 的回答。
    • 考虑到此时的答案已经快 2 年了。
    猜你喜欢
    • 2011-05-12
    • 2010-12-21
    • 2020-02-10
    • 1970-01-01
    相关资源
    最近更新 更多