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

Я пытаюсь подключиться к моей базе данных 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,

16 ответов

По какой-то причине 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.

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

Подводя итог, используйте:

127.0.0.1

Вместо:

localhost

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

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

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

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

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

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

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

Сокет 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
    

Я работаю на 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

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

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

Причина в том, что 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.

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

Ошибка генерирования 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". 

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

Исправлена ​​ошибка с надвигающимся сокетом 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/

Когда вы устанавливаете php53-mysql, используя порт, он возвращает следующее сообщение, которое является решением этой проблемы:

To use mysqlnd with a local MySQL server, edit /opt/local/etc/php53/php.ini
and set mysql.default_socket, mysqli.default_socket and
pdo_mysql.default_socket to the path to your MySQL server's socket file.

For mysql5, use /opt/local/var/run/mysql5/mysqld.sock
For mysql51, use /opt/local/var/run/mysql51/mysqld.sock
For mysql55, use /opt/local/var/run/mysql55/mysqld.sock
For mariadb, use /opt/local/var/run/mariadb/mysqld.sock
For percona, use /opt/local/var/run/percona/mysqld.sock

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

pdo_mysql.default_socket=/tmp/mysql.sock

Конечно, символическая ссылка тоже работает, поэтому вы предпочитаете, какую из них изменить.

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

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

[ErrorException] Предупреждение: PDO::__construct(): [2002] Нет такого файла или каталога (пытается подключиться через unix:///var/mysql/mysql.sock) в…htdocs/Symfony/vendor/doctrine-dbal/ Библиотека /Doctrine/DBAL/ Водитель /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/

Клиент MySQL по умолчанию пытается подключиться через локальный файл, называемый сокетом, вместо подключения к адресу обратной связи (127.0.0.1) для localhost.

Расположение этого файла сокета по умолчанию, по крайней мере в OSX, /tmp/mysql.sock,

БЫСТРОЕ, МЕНЬШЕ ЭЛЕГАНТНОЕ РЕШЕНИЕ

Создайте символическую ссылку, чтобы обмануть ОС и найти правильный сокет.

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

Правильное решение

Измените путь сокета, определенный в startMysql.sh файл в /Applications/MAMP/bin,

Вы можете сделать это, просто добавив псевдоним MAMP php на терминал Apple:

alias phpmamp='/Applications/MAMP/bin/php/php7.0.0/bin/php'

Пример: > phpmamp - v

Теперь вы можете запустить что-то вроде: > phpmamp scriptname.php

Примечание. Это будет применяться только для текущего сеанса терминала.

У меня просто была эта проблема, но она появилась только при загрузке определенных страниц (другие страницы работали нормально). Оказалось, что я звонил в MySQL после того, как закрыл соединение с mysql_close(), Итак, как сказал @brucenan: убедитесь, что MySQL работает, когда вы его вызываете.

Я получил те же ошибки. Mysql работал как отдельное приложение до того, как я запустил phpMyAdmin.

Я просто остановил mysql Затем sudo /Applications/XAMPP/xamppfiles/xampp stop sudo /Applications/XAMPP/xamppfiles/xampp start

Все работало нормально

Поскольку вы можете использовать MAMP, либо измените ваш порт на 3306 по умолчанию, либо используйте 127.0.0.1 в файле database.php

$db['default'] = array(
    'dsn'   => '',
    'hostname' => 'localhost',// leave it for port 3306
    'username' => 'yourUserhere',
    'password' => 'yourPassword',
    'database' => 'yourDatabase',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'),
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

Или с настройками по умолчанию:

$db['default'] = array(
        'dsn'   => '',
        'hostname' => '127.0.0.1:8889',// leave it for port 8889
        'username' => 'yourUserhere',
        'password' => 'yourPassword',
        'database' => 'yourDatabase',
        'dbdriver' => 'mysqli',
        'dbprefix' => '',
        'pconnect' => FALSE,
        'db_debug' => (ENVIRONMENT !== 'production'),
        'cache_on' => FALSE,
        'cachedir' => '',
        'char_set' => 'utf8',
        'dbcollat' => 'utf8_general_ci',
        'swap_pre' => '',
        'encrypt' => FALSE,
        'compress' => FALSE,
        'stricton' => FALSE,
        'failover' => array(),
        'save_queries' => TRUE
    );
Другие вопросы по тегам