Назад | Перейти на главную страницу

Проблема с mysql.sock в Mac OS X, во всех продуктах Zend

Я разместил это в Zend форум, но я надеюсь, что смогу получить здесь более быстрый ответ. Я безуспешно пробовал все решения, представленные на этом форуме. Когда я перезапускаю mysql, все выглядит нормально.

sudo /usr/local/zend/bin/zendctl.sh restart 
Password:
/usr/local/zend/bin/apachectl stop [OK]
/usr/local/zend/bin/apachectl start [OK]
Stopping Zend Server GUI [Lighttpd] [OK]
spawn-fcgi: child spawned successfully: PID: 7943
Starting Zend Server GUI [Lighttpd] [OK]
Stopping Java bridge [OK]
Starting Java bridge [OK]
Shutting down MySQL
. SUCCESS! 
Starting MySQL
. SUCCESS! 

Pinging locahost также в порядке и разрешает DNS в IP.

ping localhost
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.048 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.064 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.066 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.076 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.064 ms

Но когда я пытаюсь получить доступ к локальному URL-адресу своего приложения, я получаю ужасное:

Сообщение: SQLSTATE [HY000] [2002] Не удается подключиться к локальному серверу MySQL через сокет '/tmp/mysql.sock' (2).

Для меня это шоу-пробка. Я ценю любую помощь. Спасибо.

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

resources.db.params.unix_socket = /usr/local/zend/mysql/tmp/mysql.sock

Больше не нужно подключать розетку вручную.

Проверьте свои /etc/mysql/my.cnf и посмотрите, какой сокет установлен в вашем разделе [mysqld]. Затем вы можете изменить это на /tmp/mysql.sock или просто сделайте символическую ссылку туда, где она находится, например

ln -s /var/run/mysqld/mysql.sock /tmp/mysql.sock

Конечно, большинство * nix OS стирают / tmp при выключении, поэтому первый метод, вероятно, лучший, если вы не я и не думаете, что сокет не имеет никакого отношения к / tmp

И на стороне примечания, вы должны проверить фреймворк Python Джанго, это заставило меня с радостью оставить Zend Framework в пыли.

Идея MySQL о localhost не идея IETF localhost. В MySQL, localhost означает «Unix-сокет случайного расположения», который является причиной бесконечных разочарований (и, по всей вероятности, анальных бородавок и глобального потепления). Если вы хотите использовать сокет Unix, вам необходимо настроить Zend для использования правильного сокета (я не знаю, как, похоже, никто не может выбрать стандартное расположение для сокета или стандартный способ все остальное расскажи где это). Честно говоря, просто изменив адрес вашего сервера на 127.0.0.1, что означает "localhost, нет, я не шучу, да, настоящий в сети" - гораздо менее неприятный способ (просто убедитесь, что вы сказали MySQL самому прослушивать сеть, удалив skip-networking).

При установке Mac Zend по умолчанию здесь создается файл сокета:

/usr/local/zend/mysql/tmp/mysql.sock

Взгляните на переменную "socket" в вашем файле "my.cnf", расположенном в "/ usr / local / zend / mysql / data", чтобы определить, где она находится, или переместите ее в более удобное место.