PDOException SQLSTATE[HY000] [2002] нет такого файла или каталога



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



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


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

2710   28  

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 (Transmission Control Protocol), что по существу означает, что он работает через "локальный интернет" на вашем компьютере, будучи гораздо более надежным, чем сокет UNIX в этом случае.

у меня такая же проблема, и я запускаю Mac OS X 10.10 Yosemite. Я включил сервер Apache и 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 найдите добавьте следующую строку в конце:

    '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 ошибка по другой причине. Я только что закончил строить новый стек лампы на Ubuntu 12.04 с Apache 2.4.7, PHP v5.5.10 и MySQL 5.6.16. Я переместил свои сайты обратно и запустил их. Но, я не мог загрузить свой Laravel 4.2.x на основе сайта из-за [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

enter image description here

добавить 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 service mysqld start

Шаг 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 и Homestead как моя Бродячая среда.

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

проверьте ваш порт тщательно . В моем случае это было 8889, и я использую 8888. измените " DB_HOST "с" localhost "на" 127.0.0.1 " и наоборот

это сработало после того, как я изменюсь с DB_HOST=localhost до DB_HOST=127.0.0.1 at .env file

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

(включая Vagrant-виртуальную машину)

.Баш-профиль

alias vm="ssh [email protected] -p 2222"

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

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

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

SQLSTATE[HY000] [2002] Connection refused

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

[mysqld]
# skip-networking

конечно, остановите и запустите сервер MySQL.

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

Это случилось со мной, потому что MySQL не работает. MySQL не запускался, потому что у меня отсутствовал .

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

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

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

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

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

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

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

vagrant up

вместо

homestead up

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

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

Я только что создал .env файл; отредактировал мой 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.

Comments

    Ничего не найдено.