Я пытаюсь подключиться к моей базе данных 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 выглядит не в том месте.
Проверьте, где находится ваш сокет:
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
Я нахожусь на 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:
Наконец, перезапустите 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
У меня такие же ошибки. 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 );