Предупреждение: 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 выглядит не в том месте.
Проверьте, где ваша розетка с:
sudo /usr/libexec/locate.updatedb
Когда updatedb прекращается:
locate mysql.sock
Затем найдите ваш 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
Отредактируйте свой php.ini
sudo vim /opt/local/etc/php54/php.ini
Измените строки:
pdo_mysql.default_socket=/tmp/mysql.sock mysql.default_socket=/tmp/mysql.sock mysqli.default_socket = /tmp/mysql.sock
где /tmp/mysql.sock - это путь к вашему сокету.
Сохраните ваши изменения и выйдите из ESC + SHIFT: x
Перезапустите 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
Клиент 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
);