Проблема 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).

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

4 ответа

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

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 Framework, Django, он заставил меня счастливо оставить 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", чтобы определить, где он находится, или переместите его в более удобное место.

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