Как мне заставить CakePHP испечь файл mysql.sock и распознать MySQL при использовании MAMP на Mac OSX? - PullRequest
3 голосов
/ 14 декабря 2008

Я сейчас читаю «Начало 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-сокету, а именно к osx mysql-socket по умолчанию - вместо того, который использует MAMP. Поэтому я изменяю свои конфигурации базы данных, чтобы подключаться к mysql-сокету UNIX (: /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.

Кроме того, хотя я использую UNIX-сокет, который MAMP показывает на своем экране приветствия, CakePHP теряет соединение с базой данных при использовании этого сокета вместо localhost.

Любые идеи о том, как я могу заставить испечь работу?

- Редактировать 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

Рег. подключение к локальному сокету: я удалил начальное двоеточие в параметре хоста, тот же результат.

Ответы [ 11 ]

18 голосов
/ 23 августа 2009

Я нахожу решение этой проблемы: Добавьте конфигурацию сокета в файл 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' => '',

);
13 голосов
/ 14 декабря 2008

Из-за ошибки похоже, что он пытается подключиться к реальному IP-адресу, а не к сокету UNIX, посмотрите:

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

Он добавляет порт в сокет, что неправильно.

Итак, я сначала попытался бы настроить MySQL для прослушивания запросов TCP / IP (отредактируйте соответствующий раздел в my.cnf) и попытаться предоставить 127.0.0.1 вместо сокета.

В случае, если вы не прокрутите вниз :

Чтобы исправить это на уровне CakePHP, измените host на database.php на 'localhost' и добавьте директиву порта со значением, равным имени сокета '/Applications/MAMP/tmp/mysql/mysql.sock'

6 голосов
/ 23 декабря 2011

Для тех, кто сталкивается с этой проблемой при использовании 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' => ''
    );

}
1 голос
/ 25 января 2012

Для меня я забыл установить порт на хосте, поскольку я не использовал порт MySQL по умолчанию в MAMP.

т.е. Если ваш порт MySQL 8889, установите host на localhost:8889.

1 голос
/ 13 марта 2009
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp/mysql.sock

У меня была точно такая же проблема с mamp, и я исправил ее с помощью приведенной выше команды. Я думаю, что вы должны запускать эту команду каждый раз при перезагрузке компьютера. Может быть, есть лучший способ сделать это, но я использую это с clix.app, так что обычно он довольно быстрый. Также измените ваш хост на localhost.

1 голос
/ 17 декабря 2008

У меня была такая же проблема при использовании 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 не устанавливается.

При этом мне не нужно было менять конфигурацию базы данных.

0 голосов
/ 21 сентября 2009

Вы также можете сделать символическую ссылку, bake ищет mysql.sock в / tmp

как это:

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

Ура, Эббот.

0 голосов
/ 10 августа 2009

Попробуйте настроить брандмауэр ... Это было для меня!

0 голосов
/ 06 марта 2009

Это сработало для меня:

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'
        );
}
0 голосов
/ 02 января 2009
    class DATABASE_CONFIG
{
    public $default  =   array(
        'driver'        =>  'mysql',
        'persistent'    =>  false,
        'host'          =>  'localhost',
        'login'         =>  'account',
        'password'      =>  'password',
        'database'      =>  'database',
        'prefix'        =>  '',
        'port'          =>  '/var/mysql/mysql.sock'
    );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...