PDOException SQLSTATE[HY000] [2002] нет такого файла или каталога
Я считаю, что я успешно развернул свой (очень простой) сайт в fortrabbit, но как только я подключусь к SSH для запуска некоторых команд (например,php artisan migrate
или php artisan db:seed
) Я получаю сообщение об ошибке:
[PDOException]
SQLSTATE[HY000] [2002] No such file or directory
в какой - то момент миграция должна была сработать, потому что мои таблицы есть-но это не объясняет, почему она не работает для меня сейчас.
28 ответов
сообщение об ошибке указывает, что соединение MySQL через сокет попробовано (которое не поддерживается).
в контексте Laravel (artisan) вы, вероятно, хотите использовать другую / правильную среду. Например:php artisan migrate --env=production
(или любой другой среды). См.здесь.
Laravel 4: изменить "хост" в
app/config/database.php
файл из " localhost "в"127.0.0.1"Laravel 5: изменить "DB_HOST" в
.env
файл из " localhost "в"127.0.0.1"
у меня была точно такая же проблема. Ни одно из вышеперечисленных решений не сработало для меня. Я решил проблему, изменив "хост" в/app/config / database.php файл от "localhost"до " 127.0.0.1".
не уверен, почему "localhost" не работа по умолчанию, но я нашел этот ответ в аналогичном вопросе, решенном в сообщении symfony2. https://stackoverflow.com/a/9251924/1231563
обновление: Некоторые люди спрашивали, почему это исправление работает, поэтому я немного изучил эту тему. Кажется, что они используют разные типы соединений, как описано в этом постеhttps://stackoverflow.com/a/9715164/1231563
проблема, которая возникла здесь в том, что "localhost" использует сокет UNIX и не может найти базу данных в стандартном каталоге. Однако "127.0.0.1" использует TCP (протокол управления передачей), что по существу означает, что он работает через "локальный интернет" на вашем компьютере, будучи гораздо более надежным, чем сокет UNIX в этом случае.
у меня такая же проблема, и я запускаю Mac OS X 10.10 Yosemite. Я включил сервер Apache и PHP, который уже поставляется с ОС. Затем я просто настроил библиотеку mCrypt для начала работы. После этого, когда я работал с моделями и БД, я получил ошибку:
[PDOException]
SQLSTATE[HY000] [2002] No such file or directory
причина, по которой я нашел, заключается в том, что PHP и MySQL не могут подключиться сами. Чтобы устранить эту проблему, я выполняю следующие шаги:
-
откройте терминал и подключитесь к mysql с:
mysql -u root -p
-
он запросит у вас соответствующий пароль. Затем, как только вы получите MySQL promt, введите следующую команду:
mysql> show variables like '%sock%'
-
вы получите что-то вроде этого:
+-----------------------------------------+-----------------+ | Variable_name | Value | +-----------------------------------------+-----------------+ | performance_schema_max_socket_classes | 10 | | performance_schema_max_socket_instances | 322 | | socket | /tmp/mysql.sock | +-----------------------------------------+-----------------+
-
сохранить значение последней строки:
/tmp/mysql.sock
-
в папке проекта laravel найдите добавьте следующую строку в конце:
'unix_socket' => '/tmp/mysql.sock'
у вас должно быть что-то вроде этого:
'mysql' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'SchoolBoard',
'username' => 'root',
'password' => 'venturaa',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'unix_socket' => '/tmp/mysql.sock',
),
теперь просто сохраните изменения и перезагрузите страницу и она должна работать! Надеюсь, это может быть полезно!
я столкнулся с [PDOException] SQLSTATE[HY000] [2002] No such file or directory
ошибка по другой причине. Я только что закончил создание нового стека ламп на Ubuntu 12.04 с Apache 2.4.7, PHP v5.5.10 и MySQL 5.6.16. Я переместил свои сайты обратно и запустил их. Но я не мог загрузить свой Laravel 4.2.х сайта из-за [PDOException]
выше. Итак, я проверил php -i | grep pdo
и заметил эту строку:
pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock
но, в моем / etc / my.cnf файл носка на самом деле находится в /var/run/mysqld/mysqld.sock
.
Итак, я открыл свой php.ini и установите значение pdo_mysql.default_socket
:
pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock
затем я перезапустил apache и проверил php -i | grep pdo
:
pdo_mysql.default_socket => /var/run/mysqld/mysqld.sock => /var/run/mysqld/mysqld.sock
это исправило это для меня.
ответ от @stuyam решил проблему "нет такого файла или каталога" для меня
короткий ответ: измените "хост" в /app/config/database.php файл от "localhost"до " 127.0.0.1"
но тогда у меня была "ошибка подключения отказано". Если у кого-то была такая же проблема, моим решением для этого было обновление приложения/config/local/database.php-файл, поэтому порт 8889:
'mysql' => array(
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => '8889',
'database' => 'databaseName',
'username' => 'root',
'password' => 'root',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
Если вы используете Laravel Homestead, убедитесь, что вы вызываете команды на сервере.
homestead ssh
затем просто cd в правый каталог и запустите свою команду там.
добавить mysql.путь носка в базе данных.php-файл, как показано ниже пример
'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
Eample
'mysql' => [
'driver' => 'mysql',
'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '8889'),
в моем случае у меня не было никаких проблем, просто забыл запустить службу mysql...
sudo сервис mysqld пуск
Шаг 1
найдите путь к вашему unix_socket, для этого просто запустите netstat -ln | grep mysql
вы должны получить что-то вроде этого
unix 2 [ ACC ] STREAM LISTENING 17397 /var/run/mysqld/mysqld.sock
Шаг 2
возьмите это и добавьте его в свой unix_socket параметр
'mysql' => array(
'driver' => 'mysql',
'host' => '67.25.71.187',
'database' => 'dbname',
'username' => 'username',
'password' => '***',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'unix_socket' => '/var/run/mysqld/mysqld.sock' <-----
),
),
надеюсь, что это помогает !!
Это потому, что PDO обрабатывает хост "localhost" специально:
Примечание: только Unix: когда имя хоста установлено в "localhost", то подключение к серверу осуществляется через доменный сокет. Если PDO_MYSQL является скомпилирован против libmysqlclient, то расположение файла сокета в команде собраны в месте. Если pdo_mysql компилируется против mysqlnd сокет по умолчанию может быть установлен через pdo_mysql.default_socket установочный.
(от http://php.net/manual/en/ref.pdo-mysql.connection.php)
изменение localhost на 127.0.0.1 "заставит" использовать TCP.
Примечание: mysqli_connect отлично работает с localhost.
основываясь на ответе от @dcarrith ...
вместо редактирования файлов конфигурации я создал псевдоним в местоположении, которое ищет PHP, который подключается к реальному mysql.носок. (источник)
просто запустите эти две команды (перезапуск не требуется):
mkdir /var/mysql
ln -s /tmp/mysql.sock /var/mysql/mysql.sock
Я работаю на MAMP Pro и имел эту аналогичную проблему при попытке миграции (создание таблиц БД). Попробовал несколько из этих упомянутых предложений, но не сделал этого для меня.
Итак, просто (после часа поиска) я добавил две вещи в/config / database.РНР.
'port' => '1234',
'unix_socket' => '/path/to/my/socket/mysqld.sock'
работает теперь отлично!
начиная с Laravel 5 имя пользователя и пароль базы данных идут в .файл env, который существует в папке проекта, например,
DB_HOST=127.0.0.1
DB_DATABASE=db1
DB_USERNAME=user1
DB_PASSWORD=pass1
Как вы можете видеть, эти переменные среды переопределяют строки "forge" здесь, поэтому их изменение не имеет никакого эффекта:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
дополнительная информация здесь https://mattstauffer.co/blog/laravel-5.0-environment-detection-and-environment-variables
я столкнулся с этой проблемой при запуске PHPUnit в Elixir / Gulp, и усадьба как моя Бродячая среда.
В моем случае я редактировал .файл env от DB_HOST=localhost
до DB_HOST=192.168.10.10
здесь 192.168.10.10
является IP-адресом моего бродячего/усадебного хоста.
проверьте порт тщательно . В моем случае это был 8889 и я использую 8888. измените " DB_HOST "с" localhost "на" 127.0.0.1 " и наоборот
Если вы используете Laravel Homestead, вот настройки
(включая Vagrant-виртуальную машину)
.Баш-профиль
alias vm="ssh vagrant@127.0.0.1 -p 2222"
попытка подключения к localhost:
SQLSTATE[HY000] [2002] No such file or directory
попытка подключения к 127.0.0.1:
SQLSTATE[HY000] [2002] Connection refused
OK, просто прокомментируйте / удалите следующую настройку из моего.cnf (на OS X 10.5:/opt/local/etc/mysqlxx/my.cnf
) для получения:
[mysqld]
# skip-networking
конечно, остановите и запустите сервер MySQL.
Если кто-то все еще ищет ответ, просто проверьте свой .файл env. По какой-то причине laravel создать .env.пример файла, поэтому все эти ответы не сработали для меня. Я исправил мой вопрос renamming .env.пример .env
Это случилось со мной, потому что MySQL не работает. MySQL не запускался, потому что у меня отсутствовал .
этого требовал мой /usr/local/etc/my.cnf
файл config как Глоб включают (include /usr/local/etc/my.cnf.d/*.cnf
).
под управлением mkdir /usr/local/etc/my.cnf.d
, а затем запуск MySQL, Исправлена проблема.
при использовании VirtualMachine убедитесь, что вы ssh в эту машину и перейдите в папку приложения и вызовите команду php artisan migrate оттуда.
У меня были проблемы с доступом к моему сайту drupal, и у меня была точно такая же проблема, что я исправил ее менее чем за 2 часа. Попробуйте в командной строке и перезапустите сервер mysql или службу. Введите это при входе в систему как root или super user, - перезапуск службы mysqld
Это должно сработать. Если он не перезапустит ваш локальный веб-сервер, - перезапуск службы httpd
этого должно быть достаточно. Надеюсь, это работает и для других сред. Овации.
в мае я просто использовал
vagrant up
вместо
homestead up
для моей настройки личинки кузницы с помощью усадьбы. Я предполагаю, что это означало, что сайт обслуживался, но сервер MySQL никогда не загружался. Когда я использовал последнюю команду для запуска моего бродячего ящика, ошибка исчезла.
все эти ответы кажутся тяжелыми...
Я только что создал .env
файл; отредактировано my bootstrap/app.php
file и раскомментировал следующую строку...
Dotenv::load(__DIR__.'/../');
надеюсь, это поможет кому-то
[это устарело, информация о базе данных хранится .ОКР сейчас] Более простой способ решить проблему путем редактирования
app/config/local/database.php
:)
измените конфигурацию базы данных здесь, и она должна работать
в моем случае я запускал php artisan migrate на своем Mac-терминале, когда мне нужно было ssh в vagrant и запустить его оттуда. Надеюсь, это поможет кому-то с головной болью.
это правильный ответ для меня. Я отключил опцию pdo_mysql.default_socket
в моем php.ini и установите хост базы данных в 127.0.0.1
.