CakePHP:没有这样的文件或目录(尝试通过unix:///var/mysql/mysql.sock连接)

13

我在本地机器(mac osx)上运行了一个CakePHP应用程序一段时间,突然间发现无法连接到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);

我已经检查过了,fle //var/mysql/mysql.sock不存在。它实际上在/tmp/mysql.sock中。

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

是否有人遇到类似的错误?

谢谢,
Jonesy


7
请尝试使用 127.0.0.1 代替 localhost - Pekka
6
如果你使用 localhost,mysql 默认使用本地unix套接字。将主机改为IP地址会强制使用TCP套接字。 $config['host'] = '127.0.0.1'. - Marc B
嗨,那个可行了!有点烦人是不是!现在当我上传这个项目到网络服务器时,我得改变那段代码:( 谢谢! - iamjonesy
正确的做法是将db配置中的'port'键或'db'配置中的'socket'键(两者都可以)指向您想要使用的mysql.sock文件。以下是一个经过审核和测试的示例。请在应该认可的地方表示赞许。 - Abba Bryant
显示剩余3条评论
3个回答

12

尝试在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地址进行本地连接更快得多。


1
这在CakePHP 1.3版本及以下版本中有效。对于2.0及以上版本,请参见Kent Widman的下面的答案。 - Brad Koch
考虑到这个答案已经接近2年了,这是有道理的。 - Abba Bryant

12

如果您在使用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。 - damusnet

6
在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
        );
    }

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