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

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

Вчера это сработало хорошо, и теперь я внезапно получил ошибку в названии.

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

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

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

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

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

По какой-то причине 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. Когда updateb завершается:

      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/

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

 pdo_mysql.default_socket=/tmp/mysql.sock 

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

Когда вы устанавливаете 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 

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

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

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

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

$ 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 запускался как отдельное приложение, прежде чем я начал phpMyAdmin.

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

Он отлично работал

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

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

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

Пример: > phpmamp - v

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

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

Поскольку вы можете использовать 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 );