我目前正在阅读David Golding的“Beginning CakePHP:从新手到专业”。有一次,我必须使用CLI命令“蛋糕烘烤”,我得到欢迎屏幕,但当我尝试烘烤,例如控制器我收到以下错误消息:
Warning: mysql_connect(): Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (2) in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 117
Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 122
Warning: mysql_get_server_info(): supplied argument is not a valid MySQL-Link resource in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 130
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 154
Error: Your database does not have any tables.
我怀疑错误消息与php试图访问错误的mysql-socket,即默认的osx mysql-socket而不是MAMP使用的错误消息有关。因此,我更改了我的数据库配置以连接到UNIX mysql-socket(:/Applications/MAMP/tmp/mysql/mysql.sock):
class DATABASE_CONFIG {
var $default = array(
'driver' => 'mysql',
'connect' => 'mysql_connect',
'persistent' => false,
'host' =>':/Applications/MAMP/tmp/mysql/mysql.sock', // UNIX MySQL-socket
'login' => 'my_user',
'password' => 'my_pass',
'database' => 'blog',
'prefix' => '',
);
}
但是我使用新套接字得到了相同的错误消息:
Warning: mysql_connect(): Can't connect to local MySQL server through socket '/Applications/MAMP/tmp/mysql/mysql.sock:3306' (2) in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 117
Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 122
Warning: mysql_get_server_info(): supplied argument is not a valid MySQL-Link resource in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 130
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 154
Error: Your database does not have any tables.
此外,即使我使用MAMP在欢迎屏幕上显示的UNIX套接字,当使用此套接字而不是localhost时,CakePHP会丢失数据库连接。
关于如何烘焙工作的任何想法?
- 编辑1 -
谢谢大家帮帮我! :)
我有一个问题,想知道在my.cnf中编辑哪个地方让MySQL听取TCP / IP请求。我能找到的唯一提到TCP / IP的段落如下:
# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (via the "enable-named-pipe" option) will render mysqld useless!
#
#skip-networking
这允许我完全关闭TCP / IP,这与我的意图相反。我不知道如何处理你的建议,如果你能更详细一点就会很棒。在这些问题上我总共n00b:S
注册。连接到本地套接字:我删除了host-parameter中的前导冒号,结果相同。
答案 0 :(得分:18)
我找到了解决这个问题的方法: 在cakephp app / config / database.php文件中添加套接字配置
class DATABASE_CONFIG {
var $default = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'port' => '/Applications/MAMP/tmp/mysql/mysql.sock', // here is the key !
'login' => 'you',
'password' => 'yourpass',
'database' => 'yourdb',
'prefix' => '',
);
答案 1 :(得分:13)
从错误中看,它看起来正在尝试连接到实际的IP地址而不是UNIX套接字,请看:
'/Applications/MAMP/tmp/mysql/mysql.sock:3306'
它正在向套接字附加一个端口,这是错误的。
所以,我首先尝试配置MySQL来监听TCP / IP请求(编辑my.cnf中的相应部分)并尝试提供127.0.0.1而不是套接字。
要在CakePHP级别修复它,将database.php上的主机更改为'localhost'并添加一个port指令,其值设置为套接字名称'/Applications/MAMP/tmp/mysql/mysql.sock'
答案 2 :(得分:6)
对于使用CakePHP 2.0时遇到此问题的任何人:对我来说,上面的数据库配置文件并不能解决问题。但是找到了'unix_socket'属性,这对我有用:
<?php
class DATABASE_CONFIG {
public $default = array(
'datasource' => 'Database/Mysql',
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'unix_socket' => '/tmp/mysql.sock',
'login' => 'xxx',
'password' => 'xxx',
'database' => 'xxx',
'encoding' => 'UTF8',
'prefix' => ''
);
}
答案 3 :(得分:1)
使用MAMP和Cake CLI时遇到了同样的问题。我正在运行CakePHP 1.1xxx和MAMP 1.7。
问题是,无法找到MySQL套接字:D
打开终端并输入以下内容:
my-macbook:~ chris$ php -i | grep mysql.default_socket
mysql.default_socket => no value => no value
my-macbook:~ chris$ php -i -c /Applications/MAMP/conf/php5 | grep mysql.default_socket
mysql.default_socket => /Applications/MAMP/tmp/mysql/mysql.sock => /Applications/MAMP/tmp/mysql/mysql.sock
问题是,如果没有明确地给php二进制文件提供其(读取MAMP的)配置文件的路径,则不会设置mysql.default_socket。
使用它我不需要改变我的数据库配置。
答案 4 :(得分:1)
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp/mysql.sock
我和mamp有同样的问题,并用上面的命令修复它。我认为每次重新启动计算机时都必须运行此命令。也许有更好的方法来做到这一点,但我在clix.app中使用它,所以它通常很快。另外,将您的主机更改为localhost。
答案 5 :(得分:1)
对我来说,我忘记在主机上设置端口,因为我没有在MAMP中使用默认的MySQL端口。
即。如果您的MySQL端口是8889,请将host
设置为localhost:8889
。
答案 6 :(得分:0)
是的有一个类似的问题,我认为指向socket:portno,因为Vinko建议可能有效 - 但是如果你使用ip地址/ localhost你会没事的。
答案 7 :(得分:0)
class DATABASE_CONFIG
{
public $default = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'account',
'password' => 'password',
'database' => 'database',
'prefix' => '',
'port' => '/var/mysql/mysql.sock'
);
}
答案 8 :(得分:0)
这对我有用:
class DATABASE_CONFIG
{
public $default = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'account',
'password' => 'password',
'database' => 'database',
'prefix' => '',
'port' => '/Applications/MAMP/tmp/mysql/mysql.sock'
);
}
答案 9 :(得分:0)
尝试配置防火墙......我就是这种情况!
答案 10 :(得分:0)
你也可以创建一个符号链接,bake正在/ tmp
中寻找mysql.sock 像这样:ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp/mysql.sock
干杯,Ebbot。