数据库连接"Mysql"丢失且mysql.sock文件丢失。

7
我试图通过cake命令行工具生成模型代码,但遇到了这个问题。
Warning Error: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock) in [/Users/test/Google_WWW/project_name/lib/Cake/Model/Datasource/Database/Mysql.php, line 177]

Error: Database connection "Mysql" is missing, or could not be created. (although it's showing that mysql database is connected at localhost in cakephp directory)

我正在使用MAMP。
我进行了很多搜索并找到了一些解决方案。例如,这个CakePHP: No such file or directory (trying to connect via unix:///var/mysql/mysql.sock) 或者我也可以创建mysql.sock的符号链接。
/Applications/MAMP/tmp/mysql/mysql.sock (not present in directory)

在做任何操作之前,问题是这个目录中没有mysql.sock文件。我已经尝试重新安装MAMP,但仍然没有mysql.sock。

请帮助我解决这个问题?我能创建自己的mysql.sock文件吗..?

编辑:我的数据库配置

public $default = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'root',
    'password' => 'root',
    'database' => 'db_name',
    'prefix' => ''
);

请问您能否发布您的数据库配置参数? - arilia
我编辑了我的问题,必须说明的一件事是数据库连接没有任何问题。但是通过cakephp cli创建模型时,它使用的mysql.sock在我提到的mamp文件夹中不存在。 - ihaider
如果您尝试使用127.0.0.1而不是localhost会怎样呢? - arilia
不,问题仍然存在。不过还是谢谢你的回复! - ihaider
7个回答

11

MAMP在处理mysql方面有些奇怪。很可能需要设置符号链接以便它知道在哪里找到它。类似这样:

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


谢谢回复。我确实创建了一个符号链接,但我的问题没有解决。 - ihaider
1
要在php-cli中使用它,在创建符号链接后,编辑您的php.ini文件:pdo_mysql.default_socket=/tmp/mysql.sockmysql.default_socket=/tmp/mysql.sockmysqli.default_socket=/tmp/mysql.sock - Seb33300
在我的情况下,文件根本没有被创建。您能告诉我如何让MAMP生成该文件吗?但是phpMyAdmin运行得非常好。 - Harsha M V
上面的博客链接无法使用。此符号链接解决方案针对的是MAMP,而不是MAMP PRO。 - geoidesic
1
太棒了,你的解决方案真的有效。我陷入这个问题已经将近两个星期了。 - Sruit A.Suk

4

在搜索和尝试了很多方法后,我终于成功解决了我的问题。Chuck Burgess提供的答案可以解决这个问题,但我的情况略有不同,我无法在以下位置看到mysql.sock文件:

    /Applications/MAMP/tmp/mysql/mysql.sock

我原本以为我的mysql.sock文件丢失了,但实际上它并没有,而是被隐藏了(这很奇怪!我用命令行到那个文件夹查看时是可以看到的)。我使用的是MAC系统,以'.'开头的文件通常是被隐藏的,但不知道为什么mysql.sock也被隐藏了,所以我在我的数据库配置文件中添加了一个参数(unix_socket),问题得到了解决。

   'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock'

同样的问题,我的隐藏并且可以通过命令行看到。但是当我添加unix_socket时,仍然无法连接。 - Harsha M V

1
在我的情况下,是因为我调用了错误版本的PHP。也就是说,我使用的是/usr/bin/php,而MAMP Pro的php是/Applications/MAMP/bin/php/php5.3.29/bin/php

伙计,你怎么做这个? - Monclee

0
我一整个周末都在苦苦挣扎,最终解决了问题。原来是php.ini指向了一个不存在的“extensions dir”。创建一个phpinfo()文件并查看此字段的值: extensions_dir

我注意到在mamp php安装文件夹中有一个no-debug-non-zts-20131226文件夹,它与phpinfo()中显示的值不同。我所做的就是克隆这个文件夹并将其名称更改为phpinfo()中的值。也许你可以修改php.ini文件,但我不想这样做。
我看到你已经解决了你的问题,但我的问题不同,所以我发布了这个答案,以帮助未来遇到类似问题的人。
希望这能帮到你。

0
在我的情况下,问题出现在一次停电后。因此,我通过删除 /Applications/MAMP/tmp/mysql/mysql.pid 文件并重新启动 MAMP 来解决它。

这破坏了我的MAMP :-( - rcpfuchs

0
使用MAMP在文件夹/var/mysql/中创建符号链接:
sudo ln -n /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock

0

我也遇到了同样的问题,但是通过连接IP:端口而不是套接字成功解决了它。

'host' => '127.0.0.1', //use 172.0.0.1 instead of localhost
'port' => '8889', //default MAMP MySQL devel port, default production port is 3306

并且忘记关于套接字连接的事情。


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