Предупреждение: mysql_connect (): [2002] Нет такого файла или каталога (пытается подключиться через unix: ///tmp/mysql.sock) в - PullRequest
238 голосов
/ 19 ноября 2010

Я пытаюсь подключиться к моей базе данных MySQL через терминал на моем Apple (с PHP).

Вчера все работало нормально, и теперь я неожиданно получаю сообщение об ошибке в заголовке.

Сценарий работает, когда я использую свой браузер для его запуска (у меня установлен XAMPP), но Терминал отказывается подключаться к БД.

Вот файл, который я включаю для подключения (скрипт работает, когда яне включайте это, но тогда оно не подключается к БД):

<?php
    mysql_connect("localhost", "root", "") or die(mysql_error());
    mysql_select_db("FNB1C_data") or die(mysql_error());
?>

Это должно работать, так как оно работает с моим браузером.

Команда, которую я использую на Терминале, php scriptname.php.

Ответы [ 17 ]

412 голосов
/ 01 сентября 2011

По какой-то причине mysql в OS X получает неправильное расположение требуемого файла сокета, но, к счастью, решение так же просто, как установка символической ссылки.

Возможно, у вас есть сокет (отображается как файл нулевой длины) как /tmp/mysql.sock или /var/mysql/mysql.sock, но одно или несколько приложений ищут его в другом месте. Узнайте с помощью этой команды:

ls -l /tmp/mysql.sock /var/mysql/mysql.sock

Вместо того, чтобы перемещать сокет, редактировать файлы конфигурации и не забывать хранить отредактированные файлы локально и вдали от серверов, где пути указаны правильно, просто создайте символическую ссылку, чтобы ваш Mac нашел нужный сокет, даже если он просматривает не то место!

Если у вас есть /tmp/mysql.sock, но нет /var/mysql/mysql.sock, тогда ...

cd /var 
sudo mkdir mysql
sudo chmod 755 mysql
cd mysql
sudo ln -s /tmp/mysql.sock mysql.sock

Если у вас есть /var/mysql/mysql.sock, но нет /tmp/mysql.sock, тогда ...

cd /tmp
ln -s /var/mysql/mysql.sock mysql.sock

Для создания каталога и ссылки вам потребуются разрешения, поэтому при необходимости просто добавьте префикс вышеупомянутых команд к sudo.

358 голосов
/ 12 января 2012

У меня также была эта ошибка, но я мог исправить ее только с помощью предложения здесь .

Чтобы подвести итог, используйте:

127.0.0.1

Вместо:

localhost

Причина в том, что "localhost" - это специальное имя для драйвера MySQL, заставляющее его использовать сокет UNIX для подключения к MySQL вместо сокета TCP.

23 голосов
/ 09 июня 2012

У меня была такая же проблема, и вот как я ее исправил:

У меня было это, и оно не работало:

$con = mysql_connect('localhost', 'root', '1234');

Я сделал это, и это сработало:

$con = mysql_connect(':/Applications/MAMP/tmp/mysql/mysql.sock', 'root', '1234');

Вместо использования сервера MySQL я подключился напрямую к Unix Socket.Работал на меня.

21 голосов
/ 08 июня 2013

Сокет MySQL, как правило, находится в /tmp/mysql.sock или /var/mysql/mysql.sock, но, вероятно, PHP выглядит не в том месте.

  1. Проверьте, где находится ваш сокет:

     sudo /usr/libexec/locate.updatedb
    
  2. Когда действие updatedb прекращается:

     locate mysql.sock
    
  3. Затем найдите свой php.ini:

     php -i | grep php.ini
    

    это выведет что-то вроде:

     Configuration File (php.ini) Path => /opt/local/etc/php54
     Loaded Configuration File => /opt/local/etc/php54/php.ini
    
  4. Отредактируйте ваш php.ini

     sudo vim /opt/local/etc/php54/php.ini
    
  5. Измените строки:

     pdo_mysql.default_socket=/tmp/mysql.sock
     mysql.default_socket=/tmp/mysql.sock
     mysqli.default_socket = /tmp/mysql.sock
    

    где /tmp/mysql.sock - путь к вашему сокету.

  6. Сохраните ваши изменения и выйдите из ESC + SHIFT: x

  7. Перезапустите Apache

     sudo apachectl stop
     sudo apachectl start
    
11 голосов
/ 09 июля 2012

Я на XAMPP на Mac OS X, и Решение Брайана Лоу, приведенное выше, работало с небольшой модификацией .

Файл mysql.sock находится в папке "/ Applications / xampp / xamppfiles / var / mysql /".Поэтому пришлось связать его как в / tmp, так и / var / mysql.Я не проверял, какой из них используется командной строкой PHP, но это помогло, поэтому я счастлив: -)

sudo su
ln -s /Applications/xampp/xamppfiles/var/mysql/mysql.sock /tmp/mysql.sock
mkdir /var/mysql
ln -s /Applications/xampp/xamppfiles/var/mysql/mysql.sock /var/mysql/mysql.sock
10 голосов
/ 15 сентября 2015

Mac OS X EL Capitan + MAMP Pro Сделай это

cd /var
sudo mkdir mysql
sudo chmod 755 mysql
cd mysql
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock

Тогда сделай это

cd /tmp
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock

Надеюсь, это сэкономит вам время.

6 голосов
/ 25 ноября 2013

Причина в том, что php не может найти правильный путь mysql.sock.

Пожалуйста, убедитесь, что ваш mysql запущен первым.

Затем, пожалуйста, подтвердите, какой путь расположен mysql.sock, например /tmp/mysql.sock

затем добавьте эту строку пути в php.ini:

  • mysql.default_socket = /tmp/mysql.sock
  • mysqli.default_socket = /tmp/mysql.sock
  • pdo_mysql.default_socket = /tmp/mysql.sock

Наконец, перезапустите Apache.

6 голосов
/ 19 ноября 2010

Когда вы сталкиваетесь со следующей проблемой:

Ошибка генерирования PHP "Предупреждение: mysql_connect () http://function.mysql -connect : 2002 Нет такого файла или каталога (при попытке соединения через unix: ///tmp/mysql.sock)"

Установите значение "mysql.default_socket" в вашем /etc/php.ini на

 "mysql.default_socket = /var/mysql/mysql.sock". 

Затем перезапустите веб-сервис в админке сервера

2 голосов
/ 03 апреля 2015

Исправлена ​​ошибка с надвигающимся сокетом 2002 года, которая указывает, где MySQL размещает сокет и где OSX считает, что это должно быть, MySQL помещает его в / tmp, а OSX ищет его в / var / mysql, сокет - это тип файла,разрешает связь клиент / сервер mysql.

sudo mkdir /var/mysql

, а затем

sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock

источник: http://coolestguidesontheplanet.com/get-apache-mysql-php-phpmyadmin-working-osx-10-10-yosemite/

1 голос
/ 29 сентября 2015

у меня была такая же проблема

[PDOException] SQLSTATE [HY000] [2002] Нет такого файла или каталога

[ErrorException] Предупреждение: PDO :: __ construct (): [2002] Нет такого файла или каталога (пытается подключиться через unix: ///var/mysql/mysql.sock) в… htdocs / Symfony / vendor / doctrine-dbal / lib / Doctrine /DBAL/Driver/PDOConnection.php

Таким образом, решение заключается в создании символической ссылки на файл sock, что решает проблему. Для решения проблемы сделайте следующее:

$ sudo mkdir / private / var / mysql /

$ sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /private/var/mysql/mysql.sock

Источник: http://www.reecefowell.com/2012/07/21/symfony2-cli-does-not-connect-to-mysql-while-browser-works-fine/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...