3

私は現在、David Golding による「Beginning CakePHP: From Novice to Professional」を読んでいます。ある時点で、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.

エラーメッセージは、MAMPが使用するものではなく、間違ったmysql-socket、つまりデフォルトのosx mysql-socketにアクセスしようとしているphpに関係していると思われます。したがって、データベース構成を変更して、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 ソケットを使用していても、ローカルホストの代わりにこのソケットを使用すると、CakePHP はデータベース接続を失います。

ベイクを機能させる方法についてのアイデアはありますか?

-- 編集 1 --

私を助けてくれてありがとう!:)

MySQL が TCP/IP 要求をリッスンするように my.cnf のどこを編集すればよいかわかりません。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 を完全にオフにすることができますが、これは私の意図とは逆です。あなたが提案したことについてどうすればいいのかわかりません。もっと精巧にできれば、それは素晴らしいことです。私はこれらの問題について完全に無関心です:S

登録 ローカル ソケットへの接続: ホスト パラメータの先頭のコロンを削除しましたが、結果は同じです。

4

11 に答える 11

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' => '',

);
于 2009-08-23T16:22:14.003 に答える
13

エラーから、UNIX ソケットではなく実際の IP アドレスに接続しようとしているように見えます。

'/アプリケーション/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」に設定してポート ディレクティブを追加します。

于 2008-12-14T13:37:18.073 に答える
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' => ''
    );

}
于 2011-12-23T09:55:35.693 に答える
1

MAMPとCakeCLIを使用した場合も、同じ問題が発生しました。CakePHP1.1xxxとMAMP1.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が設定されないことです。

これを使用すると、データベース構成を変更する必要はまったくありませんでした。

于 2008-12-17T02:37:02.723 に答える
1

私の場合、MAMPでデフォルトのMySQLポートを使用していなかったため、ホストにポートを設定するのを忘れました。

つまり、MySQLポートが8889の場合は、に設定hostlocalhost:8889ます。

于 2012-01-24T21:45:36.487 に答える
0

シンボリック リンクを作成することもできます。bake は /tmp で mysql.sock を探します。

このような:

ln -s /アプリケーション/MAMP/tmp/mysql/mysql.sock /tmp/mysql.sock

乾杯、エボット。

于 2009-09-21T10:40:51.543 に答える
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'
    );
}
于 2009-01-02T17:52:03.010 に答える
0

ファイアウォールを設定してみてください...私の場合はそうでした!

于 2009-08-10T08:38:31.930 に答える
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'
        );
}
于 2009-03-06T04:42:23.927 に答える
0

ええ、同様の問題がありました.Vinkoが提案したようにsocket:portnoを指すとうまくいくと思いますが、IPアドレス/ localhostを使用すれば問題ありません。

于 2008-12-14T17:19:07.563 に答える