Я пытаюсь настроить WordPress. У меня работает Apache и MySQL, и все учетные записи и база данных настроены. Я попытался сделать простую связь:
<?php $conn = mysql_connect('localhost', 'USER', 'PASSWORD'); if(!$conn) { echo 'Error: ' . mysql_errno() . ' - ' . mysql_error(); } ?>
И я всегда получаю это:
Ошибка: 2002 – Нет такого файла или каталога
О каком файле или каталоге можно говорить?
Я нахожусь в OS X Snow Leopard, используя встроенный Apache. Я установил MySQL с помощью x86_64 dmg.
UPDATE: я обнаружил, что сокет находится в /tmp/mysql.sock, поэтому в php.ini я заменил все вхождения неправильного пути на это.
Если вы используете Linux: путь к файлу mysql.sock неверен. Обычно это происходит потому, что вы используете (LAMPP) XAMPP и не находитесь в /tmp/mysql.sock
Откройте файл php.ini и найдите эту строку:
mysql.default_socket
И сделай это
mysql.default_socket = /path/to/mysql.sock
У меня была аналогичная проблема, и я смог решить ее, обратившись к mysql с 127.0.0.1
вместо localhost
.
Вероятно, это означает, что у меня что-то не так в настройках моих хостов, но сейчас это быстро исправить.
Это для Mac OS X с собственной установкой Apache HTTP и пользовательской установкой MySQL .
Ответ основан на отличном ответе @ alec-gorge, но, поскольку мне пришлось учесть некоторые конкретные изменения, которые были настроены в моей конфигурации, в основном для Mac OS X, я думал, что добавлю его здесь для полноты.
Убедитесь, что поддержка PHP5 включена в /etc/apache2/httpd.conf
.
Отредактируйте файл с помощью sudo vi /etc/apache2/httpd.conf
(введите пароль по sudo vi /etc/apache2/httpd.conf
) и раскомментируйте (удалите из начала) строку для загрузки модуля php5_module .
LoadModule php5_module libexec/apache2/libphp5.so
Запустите Apache HTTP с sudo apachectl start
(или restart
если он уже запущен и его необходимо перезапустить, чтобы перечитать файл конфигурации).
Убедитесь, что /var/log/apache2/error_log
содержит строку, сообщающую вам, что php5_module включен – вы должны увидеть PHP/5.3.15
(или подобное).
[notice] Apache/2.2.22 (Unix) DAV/2 PHP/5.3.15 with Suhosin-Patch configured -- resuming normal operations
Когда MySQL запущен и запущен (с ./bin/mysqld_safe
), на консоли должны быть напечатаны строки отладки, которые сообщают вам, где вы можете найти файлы журнала. Обратите внимание на имя хоста в имени файла – localhost
в моем случае – это может отличаться для вашей конфигурации.
Файл, который появляется после Logging to
, важен. Вот где MySQL регистрирует свою работу.
130309 12:17:59 mysqld_safe Logging to '/Users/jacek/apps/mysql/data/localhost.err'. 130309 12:17:59 mysqld_safe Starting mysqld daemon with databases from /Users/jacek/apps/mysql/data
Откройте файл localhost.err
(опять же, ваш может быть назван по-разному), т. tail -1 /Users/jacek/apps/mysql/data/localhost.err
чтобы узнать имя файла сокета – это должна быть последняя строка.
$ tail -1 /Users/jacek/apps/mysql/data/localhost.err Version: '5.5.27' socket: '/tmp/mysql.sock' port: 3306 MySQL Community Server (GPL)
Обратите внимание на socket:
part – это файл сокета, который вы должны использовать в php.ini
.
Есть другой способ (некоторые говорят проще) определить местоположение имени файла сокета, войдя в MySQL и запуская:
show variables like '%socket%';
Говоря о php.ini …
В каталоге /etc
есть файл /etc/php.ini.default . Скопируйте его в /etc/php.ini .
sudo cp /etc/php.ini.default /etc/php.ini
Откройте /etc/php.ini
и найдите mysql.default_socket .
sudo vi /etc/php.ini
По умолчанию mysql.default_socket
является /var/mysql/mysql.sock
. Вы должны изменить его на значение, которое вы отметили ранее – это был /tmp/mysql.sock
в моем случае.
Замените файл /etc/php.ini
чтобы отобразить имя файла сокета:
mysql.default_socket = /tmp/mysql.sock mysqli.default_socket = /tmp/mysql.sock
Перезапустите Apache HTTP.
sudo apachectl restart
Проверьте журналы, если нет ошибок, связанных с PHP5. Никакие ошибки не означают, что вы закончили, и PHP5 с MySQL должен работать нормально. Congrats!
Во-первых, убедитесь, что MySQL запущен. Команда: mysqld start
Если вы все еще не можете подключиться, то: Как выглядит ваш /etc/my.cnf?
Остальные 2 сообщения верны в том, что вам нужно проверить свой сокет, потому что 2002 – ошибка сокета.
Большой учебник по настройке LAMP: http://library.linode.com/lamp-guides/centos-5.3/index-print
Я бы проверял файл php.ini и проверял правильность настройки mysql.default_socket, а также проверял правильность настройки вашего mysqld с файлом сокета, к которому он может получить доступ. Типичным значением по умолчанию является «/tmp/mysql.sock».
Не то, чтобы это вам очень помогло, но в последних версиях (и даже менее недавних ) MySQL код ошибки 2002 означает «Не удается подключиться к локальному серверу MySQL через сокет [имя-сокета]», чтобы вы могли сказать вам еще немного.
Замена «localhost» на «127.0.0.1» в файле конфигурации (соединение db) помогло!
Я тоже столкнулся с этой проблемой, тогда я изменил «localhost» на «127.0.0.1», он работает.
в моем случае у меня проблема с mysqli_connect.
когда я хочу подключиться
mysqli_connect('localhost', 'myuser','mypassword')
mysqli_connect_error () возвращает мне эту ошибку «Нет такого файла или каталога»
это сработало для меня mysqli_connect('localhost:3306', 'myuser','mypassword')
Расширившись на ответ Matthias D, я смог решить эту ошибку 2002 года как MySQL, так и MariaDB с точными путями, используя следующие команды:
Сначала получите фактический путь к сокету MySQL:
netstat -ln | grep -o -m 1 '/.*mysql.sock'
Затем получите путь PHP :
php -r 'echo ini_get("mysql.default_socket") . "\n";'
Используя вывод этих двух команд , соедините их:
sudo ln -s /actualpath/mysql.sock /phppath/mysql.sock
Если это возвращает No such file or directory
вам просто нужно создать путь к PHP mysql.sock, например, если ваш путь был /var/mysql/mysql.sock
вы запустили:
sudo mkdir -p /var/mysql
Затем повторите команду sudo ln .
Убедитесь, что ваш локальный сервер (MAMP, XAMPP, WAMP и т. Д.) Работает.
У меня была аналогичная проблема.
В основном здесь проблема: есть, вероятно, два экземпляра mysql.
A) Один работает на /etc/init.d
B) Лампа устанавливается в / opt / lamp
Решение :
Шаг 1: – Найти все запущенные экземпляры mysql с помощью commnad "find / \ grep mysqld"
Шаг 2: – Завершение работы служб, запущенных на /etc/init.d, с помощью службы mysql stop
Шаг 3: – Перезапустите ваши лампы с помощью / opt / перезапуск лампы / лампы
Вы должны быть хорошими, чтобы пойти 🙂
Ошибка 2002 означает, что MySQL не может подключиться к локальному серверу базы данных через файл сокета (например, /tmp/mysql.sock
).
Чтобы узнать, где находится ваш файл сокета, запустите:
mysql_config --socket
затем дважды проверьте, что ваше приложение использует правый файл сокета Unix или подключается через порт TCP / IP.
Затем проверьте, правильно ли настроен PHP в вашей PHP-установке:
php -i | grep mysql.default_socket
и убедитесь, что файл существует .
Проверьте разъем:
mysql --socket=/var/mysql/mysql.sock
Если сокет Unix ошибочен или не существует, вы можете его символизировать, например:
ln -vs /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock
или исправить файл конфигурации (например, php.ini
).
Чтобы протестировать соединение PDO непосредственно с PHP, вы можете запустить:
php -r "new PDO('mysql:host=localhost;port=3306;charset=utf8;dbname=dbname', 'root', 'root');"
Проверьте также конфигурацию между Apache и CLI (интерфейс командной строки), поскольку конфигурация может отличаться.
Возможно, сервер работает, но вы пытаетесь подключиться, используя порт TCP / IP, именованный канал или файл сокета Unix, отличный от того, на котором прослушивается сервер. Чтобы исправить это, вам нужно вызвать клиентскую программу (например, указать параметр
--port
), чтобы указать номер соответствующего порта или соответствующий именованный канал или файл сокета Unix (например,--socket
option).
См.: Устранение неполадок Проблемы с подключением к MySQL
Другие утилиты / команды, которые могут помочь отслеживать проблему:
mysql --socket=$(php -r 'echo ini_get("mysql.default_socket");')
netstat -ln | grep mysql
php -r "phpinfo();" | grep mysql
php -i | grep mysql
xdebug.show_exception_trace=1
в xdebug.ini
sudo dtruss -fn mysqld
, на Linux отлаживается с strace
stat $(mysql_config --socket)
и если у вас достаточно свободного места ( df -h
). net.core.somaxconn
. На Mac, прежде чем выполнять всю тяжелую работу, просто проверьте свои настройки в « System Preferences > MySQL
. Чаще всего я столкнулся с этой проблемой, так как The MySQL Server Instance is stopped
.
Нажмите кнопку « Start MySQL Server
, и произойдет волшебство.