繁体   English   中英

在Mac OSX上使用MAMP时,如何使CakePHP烘烤以找到mysql.sock并识别MySQL?

[英]How do I get CakePHP bake to find mysql.sock and recognize MySQL while using MAMP on Mac OSX?

我目前正在阅读David Golding撰写的“ Beginning CakePHP:从新手到专业”。 在某一时刻,我必须使用CLI命令“ cake bake”,出现欢迎屏幕,但是当我尝试进行烘烤(例如,控制器)时,出现以下错误消息:

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.

我怀疑错误消息与试图访问错误的mysql-socket的php有关,即默认的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,这与我的意图相反。 我不知道如何处理您的建议,如果您能更详尽地讲,那将是很棒的。 我在这些事情上的总分是:

Reg。 连接到本地套接字:我删除了主机参数中的前导冒号,结果相同。

我找到了解决此问题的方法:在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' => '',

);

从该错误看来,它似乎正在尝试连接到实际的IP地址而不是UNIX套接字,请看:

'/Applications/MAMP/tmp/mysql/mysql.sock:3306'

它将端口附加到套接字,这是错误的。

因此,我首先尝试配置MySQL以侦听TCP / IP请求(编辑my.cnf中的相应部分),然后尝试提供127.0.0.1而不是套接字。

如果您不会向下滚动

要在CakePHP级别上进行修复,请将database.php上的主机更改为“ localhost”,然后将其端口值设置为套接字名称“ /Applications/MAMP/tmp/mysql/mysql.sock”的端口指令添加

对于使用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' => ''
    );

}

使用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。

使用它,我不需要更改我的数据库配置。

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

我在mamp遇到了完全相同的问题,并使用上述命令修复了该问题。 我认为您每次重新启动计算机时都必须运行此命令。 也许有更好的方法可以执行此操作,但是我将其与clix.app一起使用,因此通常速度很快。 另外,将主机更改为localhost。

对我来说,我没有在主机上设置端口,因为我没有在MAMP中使用默认的MySQL端口。

即,如果您的MySQL端口是8889,则将host设置为localhost:8889

尝试配置防火墙...对我来说就是这种情况!

您也可以建立符号链接,bake在/ tmp中寻找mysql.sock。

像这样:

ln -s /应用程序/MAMP/tmp/mysql/mysql.sock /tmp/mysql.sock

干杯,埃伯特。

是的,有一个类似的问题,我认为按Vinko的建议指向socket:portno可能有效-但是,如果您使用IP地址/本地主机,就可以了。

    class DATABASE_CONFIG
{
    public $default  =   array(
        'driver'        =>  'mysql',
        'persistent'    =>  false,
        'host'          =>  'localhost',
        'login'         =>  'account',
        'password'      =>  'password',
        'database'      =>  'database',
        'prefix'        =>  '',
        'port'          =>  '/var/mysql/mysql.sock'
    );
}

这对我有用:

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'
        );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM