PHP: mysql_connect(): [2002] Es konnte keine Verbindung hergestellt werden, da der Zielcomput (попытка подключения через tcp://localhost:3306)

Я пытаюсь подключиться к серверу mysql на локальном хосте через php-скрипт:

$mysql = mysql_connect('localhost', 'root', 'mysecret');

но я всегда получаю сообщение:

mysql_connect(): [2002] Es konnte keine Verbindung hergestellt werden, da der Zielcomput (попытка подключения через tcp://localhost:3306)

Я думаю, что перевод этого немецкого сообщения:

mysql_connect(): 2002 Нет такого файла или каталога (попытка подключения через tcp://localhost:3306)

Я могу использовать phpMyAdmin с этими учетными данными, поэтому они верны, и сервер mysql работает в целом. При запуске клиента MySql из консоли у меня нет проблем:

mysql -u корень -p

Введите пароль:

Добро пожаловать в монитор MySQL. Команды заканчиваются на ; или \г.

Ваш идентификатор соединения MySQL — 86.

Версия сервера: 5.0.51a-24+lenny5 (Debian)

Введите «помощь»; или '\h' для помощи. Введите '\c', чтобы очистить буфер.

mysql> выйти

до свидания

Подключение к локальному хосту через порт по умолчанию (3306) через telnet работает, но я каждый раз терял соединение:

telnet localhost 3306 Попытка

127.0.0.1...

Подключен к локальному хосту.

Экранирующий символ '^]'.

?

5.0.51a-24+lenny5`w'V\MJmg,‹42;rMkQ3IW[Соединение закрыто внешним хостом.

Как объясняет мне руководство, я думаю, что это запасной вариант для сокета, если используется «localhost». Я не могу найти mysql.sock в моем debian lenny, поэтому я не могу указать mysql.default_socket на этот путь.

Может быть, я не на правильном пути - было бы неплохо, если бы вы могли указать мне решение.


person DanielaWaranie    schedule 05.04.2011    source источник
comment
Я не говорю по-немецки, но я думаю, что это означает Не удалось установить соединение с целевым компьютером или что-то в этом роде. Вы пытались использовать пустую строку "" вместо пароля, потому что она используется по умолчанию на локальном хосте? Это просто слепое предположение.   -  person Wh1T3h4Ck5    schedule 06.04.2011
comment
Перевод что-то вроде Не удалось установить соединение, потому что целевой комп... и там сообщение обрезано. Однако попробуйте современное расширение mysql (mysqli, ..)   -  person KingCrunch    schedule 06.04.2011
comment
Можете ли вы использовать 127.0.0.1 вместо локального хоста?   -  person Wrikken    schedule 06.04.2011
comment
@Wrikken, если файл hosts хоста не полностью искажен, «localhost» всегда равен 127.0.0.1 (ipv4) или :: 1 (ipv6)   -  person Marc B    schedule 06.04.2011
comment
Да, и с такими проблемами, как правило, либо ссылка localhost не работает, и localhost по умолчанию используется для сокета для клиентского приложения mysql, а 127.0.0.1 - нет. Я ничего не просил :)   -  person Wrikken    schedule 06.04.2011
comment
@Wrikken - ты прав, иногда работает только с 127.0.0.1 (по моему опыту)   -  person Wh1T3h4Ck5    schedule 06.04.2011


Ответы (4)


Вы сможете найти mysql.sock с помощью:

$ locate mysql.sock

И отредактируйте свой php.ini соответственно:

mysql.default_socket = /path/to/mysql.sock

Перезапустите Апач...

$ apachectl graceful

... и убедитесь, что сокет установлен правильно:

// info.php

phpinfo();
person cantlin    schedule 05.04.2011

Попробуйте $mysql = mysql_connect('127.0.0.1', 'root', 'mysecret'); подключиться через TCP/IP.

person initall    schedule 05.04.2011

Расположение сокета должно быть указано в файле mysql .ini. В системах Debian он должен быть в /etc/mysql/mysql.cnf. Найдите строку, начинающуюся с «сокета» в начале файла. Скорее всего, он установлен на /var/run/mysqld/mysql.sock

person Marc B    schedule 05.04.2011

Дэ прав. В терминале, работающем под ОС UX, введите следующее:

netstat -ln | grep mysql

Это даст вам адрес вашего sock-файла. Сравните это с адресом в php.ini. Если это что-то другое, исправьте его на адрес, который netstat дал вам по совету Dae.

Да, выходом является установка адреса 127.0.0.1, но на самом деле это не решает вашу проблему.

person Kebman    schedule 24.02.2012