Как мне заставить CakePHP испечь файл mysql.sock и распознать MySQL при использовании MAMP на Mac OSX?

В настоящее время я читаю «Начало 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

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

14.12.2008 13:29:58
11 ОТВЕТОВ
РЕШЕНИЕ

Исходя из ошибки, похоже, что он пытается подключиться к реальному 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».

13
23.05.2017 12:07:25
Возможно, это специфично для CakePHP, но вход 'host' =>'localhost'в database.phpнего заставит его попытаться подключиться к локальному файлу сокета. Изменение этого в 'host' =>'127.0.0.1'соответствии с предложенным ответом решит проблему.
aroth 25.07.2011 02:54:05

Да, была похожая проблема, я думаю, что указание на сокет: portno, как предположил Винко, может сработать - однако, если вы используете IP-адрес / localhost, все будет в порядке.

0
14.12.2008 17:19:07

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

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

1
17.12.2008 02:37:02
    class DATABASE_CONFIG
{
    public $default  =   array(
        'driver'        =>  'mysql',
        'persistent'    =>  false,
        'host'          =>  'localhost',
        'login'         =>  'account',
        'password'      =>  'password',
        'database'      =>  'database',
        'prefix'        =>  '',
        'port'          =>  '/var/mysql/mysql.sock'
    );
}
0
2.01.2009 17:52:03

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

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
6.03.2009 04:42:23
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp/mysql.sock

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

1
13.03.2009 14:32:11

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

0
10.08.2009 08:38:31

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

);
18
23.08.2009 16:22:14
Это был настоящий ответ. Спасибо, Жюльен.
Petrogad 18.03.2010 05:08:45

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

нравится:

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

Приветствия, Эббот.

0
21.09.2009 10:40:51

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

}
6
23.12.2011 10:14:31

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

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

1
26.10.2012 09:02:08