Я пытаюсь подключиться к моей базе данных MySQL с помощью терминала на своем Apple (с PHP).
Вчера он работал нормально, и теперь я неожиданно получил ошибку в названии.
script работает, когда я использую свой браузер для его запуска (у меня установлен XAMPP), но Terminal отказывается подключиться к БД.
Вот файл, который я включаю для подключения (script работает, когда я не включаю это, но потом он не подключается к БД):
<?php
mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("FNB1C_data") or die(mysql_error());
?>
Это должно работать, поскольку оно работает с моим браузером.
Команда, которую я использую в терминале, PHP скриптname.php
.
Ответ 1
По какой-то причине 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.
Ответ 2
У меня также была эта ошибка, но я мог исправить ее только через предложение здесь.
Подводя итог, используйте:
127.0.0.1
Вместо:
localhost
Причина в том, что "localhost" является специальным именем для драйвера MySQL, заставляя его использовать сокет UNIX для подключения к MySQL вместо сокета TCP.
Ответ 3
У меня была такая же проблема, и я исправил ее:
У меня было это, и это не сработало:
$con = mysql_connect('localhost', 'root', '1234');
Я сделал это, и это сработало:
$con = mysql_connect(':/Applications/MAMP/tmp/mysql/mysql.sock', 'root', '1234');
Вместо использования сервера mysql я подключился непосредственно к Unix Socket. Работал для меня.
Ответ 4
Сокет MySQL находится, в общем, в /tmp/mysql.sock
или /var/mysql/mysql.sock
, но, вероятно, PHP выглядит не в том месте.
-
Проверьте, где находится ваш сокет:
sudo /usr/libexec/locate.updatedb
-
Когда updateb завершается:
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
Ответ 5
Я на 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
Ответ 6
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
Надеюсь, это сэкономит вам некоторое время.
Ответ 7
Если у вас возникла следующая проблема:
Ошибка металокации 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".
Затем перезапустите веб-службу в сервере admin
Ответ 8
Причина в том, что 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.
Ответ 9
Исправить нависшую ошибку сокета 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/
Ответ 10
Другим решением является исправление местоположения сокета в файле конфигурации php.ini следующим образом:
pdo_mysql.default_socket=/tmp/mysql.sock
Конечно, символическая ссылка тоже работает, поэтому ее предпочтение зависит от того, что вы меняете.
Ответ 11
При установке 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 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
Ответ 12
У меня была такая же проблема
[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/
Ответ 13
У меня были те же ошибки.
Mysql запускался как отдельное приложение, прежде чем я начал phpMyAdmin.
Я просто остановил mysql
затем
sudo/Приложения/XAMPP/xamppfiles/xampp stop
sudo/Приложения/XAMPP/xamppfiles/xampp start
Он отлично работал
Ответ 14
У меня была эта проблема, но она появилась только при загрузке определенных страниц (другие страницы работали нормально). Оказалось, что я звонил в MySQL после того, как я закрыл соединение с mysql_close()
. Итак, как сказал @brucenan: убедитесь, что MySQL работает, когда вы вызываете его.
Ответ 15
Вы можете сделать это, просто наложив MAMP php на терминал Apple:
alias phpmamp='/Applications/MAMP/bin/php/php7.0.0/bin/php'
Пример: > phpmamp - v
Теперь вы можете запускать что-то вроде: > phpmamp scriptname.php
Примечание. Это будет применяться только для текущего сеанса терминала.
Ответ 16
Поскольку вы можете использовать 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
);
Ответ 17
Клиент MySQL по умолчанию пытается подключиться через локальный файл, называемый сокетом, вместо подключения к адресу обратной связи (127.0.0.1) для localhost.
Расположение этого файла сокета по умолчанию, по крайней мере в OSX, - /tmp/mysql.sock
.
БЫСТРОЕ, МЕНЬШЕ ЭЛЕГАНТНОЕ РЕШЕНИЕ
Создайте символическую ссылку, чтобы обмануть ОС и найти правильный сокет.
ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp
Правильное решение
Измените путь к сокету, определенный в файле startMysql.sh
в /Applications/MAMP/bin
.