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

В настоящее время я читаю Дэвид Голдинг «Начало CakePHP: от новичка к профессионалу». В какой-то момент я должен использовать CLI-команду «take 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. 

Я подозреваю, что сообщения об ошибках связаны с тем, что php пытается получить доступ к неправильному mysql-сокету, а именно mysql-socket osx по умолчанию, вместо того, который использует 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. 

Кроме того, несмотря на то, что я использую 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

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

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

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

Для тех, кто сталкивается с этой проблемой при использовании 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 пути к его конфигурационному файлу (read MAMP), mysql.default_socket не установлен.

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

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

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

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

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

У меня была аналогичная проблема, я думаю, указывая на сокет: portno, как предложил Vinko, может работать, но если вы используете ip-адрес / localhost, все будет в порядке.

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

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

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

как это:

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

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