PDOException SQLSTATE Нет такого файла или каталога

Я считаю, что я успешно развернул мой (очень простой) сайт на fortrabbit, но как только я подключился к SSH для запуска некоторых команд (например, php artisan migrate или php artisan db:seed ), я получаю сообщение об ошибке:

 [PDOException] SQLSTATE[HY000] [2002] No such file or directory 

В какой-то момент миграция, должно быть, сработала, потому что мои таблицы есть, но это не объясняет, почему она сейчас не работает для меня.

Сообщение об ошибке указывает, что соединение MySQL через сокет проверяется (что не поддерживается).

В контексте Laravel (ремесленник) вы, вероятно, захотите использовать другую / правильную среду. Например: 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 (Transmission Control Protocol), который по существу означает, что он работает через «локальный Интернет» на вашем компьютере, будучи намного более надежным, чем сокет UNIX в этом случае.

У меня такая же проблема, и я запускаю Mac OS X 10.10 Yosemite. Я включил Apache Server и PHP, которые уже поставляются с ОС. Затем я только что настроил библиотеку mCrypt для начала работы. После этого, когда я работал с моделями и БД, я получил ошибку:

 [PDOException] SQLSTATE[HY000] [2002] No such file or directory 

Причина, по которой я нашел, – это просто потому, что PHP и MySQL не могут подключиться сами. Чтобы устранить эту проблему, я делаю следующие шаги:

  1. Откройте терминал и подключитесь к mysql с помощью:

    mysql -u root -p

  2. Он запросит у вас соответствующий пароль. Затем, как только вы получите mysql promt, введите следующую команду:

    mysql> show variables like '%sock%'

  3. Вы получите что-то вроде этого:

    +-----------------------------------------+-----------------+ | Variable_name | Value | +-----------------------------------------+-----------------+ | performance_schema_max_socket_classes | 10 | | performance_schema_max_socket_instances | 322 | | socket | /tmp/mysql.sock | +-----------------------------------------+-----------------+

  4. Сохраните значение последней строки:

    /tmp/mysql.sock

  5. В папке проекта laravel найдите файл database.php , где вы настраиваете параметры соединения с DB. В разделе mysql добавьте следующую строку в конец:

    'unix_socket' => '/tmp/mysql.sock'

  6. У вас должно быть что-то вроде этого:

'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 ошибки [PDOException] SQLSTATE[HY000] [2002] No such file or directory по другой причине. Я только что закончил создание нового стека LAMP на Ubuntu 12.04 с Apache 2.4.7, PHP v5.5.10 и MySQL 5.6.16. Я переместил свои сайты и уволил их. Но я не смог загрузить свой сайт на основе Laravel 4.2.x из-за [PDOException] выше. Итак, я проверил php -i | grep pdo php -i | grep pdo и заметил эту строку:

 pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock 

Но в моем файле /etc/my.cnf файл sock фактически находится в /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 php -i | grep pdo :

 pdo_mysql.default_socket => /var/run/mysqld/mysqld.sock => /var/run/mysqld/mysqld.sock 

Это исправило это для меня.

Ответ от @stuyam решил проблему «Нет такого файла или каталога» для меня

Краткий ответ: измените «host» в файле /app/config/database.php с «localhost» на «127.0.0.1»

Но тогда у меня была ошибка «Connection отказалась». Если у кого-то была такая же проблема, моим решением было обновить файл app / 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 в нужную директорию и запустите там свою команду.

Опция включения пользователя Mamp Разрешить доступ к сети MYSQL

введите описание изображения здесь

В моем случае у меня вообще не было проблем, просто забыл запустить службу mysql …

sudo service mysqld start

Добавьте путь mysql.sock в файл database.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'), 

Основываясь на ответе от @dcarrith …

Вместо редактирования файлов конфигурации я создал псевдоним в местоположении, которое ищет PHP, который подключается к реальному mysql.sock. ( источник )

Просто запустите эти две команды (перезагрузка не требуется):

 mkdir /var/mysql ln -s /tmp/mysql.sock /var/mysql/mysql.sock 

Я работаю на MAMP Pro и сталкивался с подобной проблемой при попытке переноса (создание таблиц db). Пробовал некоторые из этих упомянутых предложений, но не сделал этого для меня.

Итак, просто (через час googling), я добавил две вещи в /config/database.php.

 'port' => '1234', 'unix_socket' => '/path/to/my/socket/mysqld.sock' 

Прекрасно работает!

Шаг 1

Найдите путь к вашему unix_socket, для этого просто запустите netstat -ln | grep mysql 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' <----- ), ), 

Надеюсь, поможет !!

Начиная с 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 и Homestead в качестве моей бродячей среды.

В моем случае я отредактировал файл .env от DB_HOST=localhost до DB_HOST=192.168.10.10 где 192.168.10.10 – это IP моего хоста Vagrant / Homestead.

Если вы используете Laravel Homestead, вот настройки

(включая Vagrant-Virtual Machine)

.bash-профиль

 alias vm="ssh vagrant@127.0.0.1 -p 2222" 

database.php

  'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', '127.0.0.1'), 'database' => env('DB_DATABASE', 'homestead'), 'username' => env('DB_USERNAME', 'homestead'), 'password' => env('DB_PASSWORD', 'secret'), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, ], 

Терминал

 vm vagrant@homestead:~/Code/projectFolder php artisan migrate:install 

Попытка подключения к localhost:

 SQLSTATE[HY000] [2002] No such file or directory 

Попытка подключения к 127.0.0.1:

 SQLSTATE[HY000] [2002] Connection refused 

ОК, просто комментируйте / удаляйте следующий параметр из my.cnf (в OS X 10.5: /opt/local/etc/mysqlxx/my.cnf ), чтобы получить:

 [mysqld] # skip-networking 

Конечно, остановитесь и запустите MySQL Server.

Если кто-то все еще ищет ответ, просто проверьте файл .env. По какой-то причине laravel создает файл .env.example, поэтому все эти ответы не сработали для меня. Я исправил проблему переименования .env.example в .env

это правильный ответ для меня. Я отключил параметр pdo_mysql.default_socket в моем php.ini, и я создаю хост в 1.27.0.0.1

При использовании VirtualMachine убедитесь, что вы ssh на этом компьютере, и перейдите в свою папку приложений и вызовите команду перенаправления php-artisan.

У меня были проблемы с доступом к моему сайту drupal, и у меня была проблема точно так, как будто я исправил ее менее чем за 2 часа. Попробуйте в командной строке и перезапустите сервер или службу mysql. Введите это при регистрации в качестве пользователя root или суперпользователя, – перезапуск службы mysqld

Он должен работать. Если он не перезагружает ваш локальный веб-сервер, – перезагрузка службы httpd

Этого должно быть достаточно. Надеюсь, что он работает и для других сред. Приветствия.

В случае, я просто использовал

 vagrant up 

вместо

 homestead up 

для моей кузнечной личиночной установки с использованием усадьбы. Я предполагаю, что это означало, что сайт обслуживался, но сервер MySQL никогда не загружался. Когда я использовал последнюю команду для запуска моего бродячего бокса, ошибка исчезла.

Все эти ответы кажутся тяжелыми …

Я только что создал файл .env ; отредактировал мой файл bootstrap/app.php и раскомментировал следующую строку …

Dotenv::load(__DIR__.'/../');

Надеюсь, это поможет кому-то

[Это устарело, информация о базе данных хранится в .env сейчас]. Более простой способ решить проблему – редактировать

 app/config/local/database.php 

🙂

Измените конфигурацию базы данных здесь, и она должна работать

Это случилось со мной, потому что MySQL не работал. MySQL не запускался, потому что у меня отсутствовал каталог /usr/local/etc/my.cnf.d/ .

Это было необходимо для моего конфигурационного файла /usr/local/etc/my.cnf в качестве glob include ( include /usr/local/etc/my.cnf.d/*.cnf ).

Запуск mkdir /usr/local/etc/my.cnf.d , а затем запуск MySQL, исправил проблему.

Я только что переместил свой сайт с одного сервера на другой и получил эту ошибку.

Я прочитал ответ от @stuyam и изменил хост от пустой строки до 127.0.0.1 и отлично работает.

В течение многих лет я использовал пустую строку в качестве хоста и не испытывал никаких проблем.