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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
0
14 454
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

Ответ принят как подходящий

Из-за ошибки похоже, что он пытается подключиться к реальному 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, но ввод 'host' =>'localhost' в database.php заставит его попытаться подключиться к локальному файлу сокета. Изменение этого параметра на 'host' =>'127.0.0.1', как предполагает этот ответ, решит проблему.

aroth 25.07.2011 06:54

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

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

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

    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'
        );
}
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp/mysql.sock

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

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

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

);

Это был настоящий ответ. Спасибо, Жюльен.

Petrogad 18.03.2010 08:08

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

как это:

ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp/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' => ''
    );

}

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

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

Другие вопросы по теме