PHP Laravel: соединение не может быть выполнено, потому что целевая машина активно отказалась от него

Я создаю веб-приложение в Laravel 5. Приложение должно получить "имена категорий", хранящиеся в базе данных MySQL, и отобразить форму для добавления новых "имен категорий". Когда я выполняю команду php artisan serve, и я перехожу к http://localhost:8000/admin/categories/, появляется следующее сообщение об ошибке:

PDOException in Connector.php line 50:
SQLSTATE[HY000] [2002] No connection could be made because the target machine actively refused it.

В соответствии с несколькими сообщениями, которые я прочитал о переполнении стека, многие пользователи, столкнувшиеся с этой ошибкой, неправильно настроили файл .env, который переопределяет настройки по умолчанию для объекта данных PHP (PDO), как указано в файле database.php. Файл .env определен ниже:

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

И ключ mysql в файле database.php указан как:

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

Как ни странно, когда я ssh в свою виртуальную машину, и я запускаю mysql -uhomestead -psecret homestead, я могу подключиться к базе данных. Вопрос в том, почему Laravel не может подключиться к MySQL, когда я могу напрямую подключиться к нему с теми же параметрами? Что еще может отрицать доступ к Laravel?

Ответ 1

Я изменил ip-адрес, указанный в homestead.yaml, с localhost до 192.168.10.10. Затем я запустил homestead provision, и это, похоже, устранило проблему. Хост-машина не может разрешить localhost или 127.0.0.1, поскольку она уже сопоставлена ​​с самим собой.

Ответ 2

У меня такая же проблема с Wampserver. Это сработало для меня:

Вы должны изменить этот файл: "C:\wamp\bin\mysql [mysql_version]\my.ini" Например: "C:\wamp\bin\mysql [mysql5.6.12]\my.ini"

И измените порт по умолчанию 3306 на 80. (Строки 20 и 27 в обоих) порт = 3306 К порту = 80

Я надеюсь, что это будет полезно.

И затем просто зайдите на панель управления и запустите Apache и службы MySQL.

Ответ 3

почему Laravel не может подключиться к MySQL, когда я могу напрямую подключиться к нему с теми же параметрами?

Вперед, env('DB_HOST', 'localhost') нигде не совпадает с NULL и env('DB_USERNAME', 'homestead') нигде не совпадает с homestead

Вы не можете назвать "те же" такие разные вопросы, как явно предоставленный литерал, отсутствующий параметр или результат какой-либо функции! Это три разных вопроса!

Вы можете сказать "то же самое", только если вы обеспечиваете буквально одинаковые параметры в обоих случаях:

mysql -hlocalhost -uhomestead -psecret homestead

для оболочки, а

'mysql' => [
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'database'  => 'homestead',
        'username'  => 'homestead',
        'password'  => 'secret',

для Laravel.

Ответ 4

Причины могут быть:

Если вы пытаетесь получить доступ к БД из другого сервера, то большинство проблем с conman: Доступ к БД ограничен только для localhost/127.0.0.1

Решение. Вы можете изменить my.cnf (снова Ubuntu находится в /etc/mysql/my.cnf) и изменить следующее:

bind-address   = 0.0.0.0

или

bind-address   = SERVER_PUBLIC_IP_ADDRESS

Я рекомендую создать пользователя db вместо root и удалить использование root, поскольку он небезопасен для обеспечения доступа БД к любому IP-адресу с помощью пользователя root.

Если вы пытаетесь подключить БД с того же сервера:

Решение. Просто используйте TCP/IP вместо Unix-сокета. Вы сделаете это, используя 127.0.0.1 вместо localhost при подключении. Однако сокет Unix может быть быстрее и безопаснее.

После внесенных изменений перезапустите службу mysql

sudo service mysql restart

Ответ 5

Я изменил

DB_HOST = локальный

to

DB_HOST = локальный: 3307

в .env файле

Ответ 6

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

Я просто установил свой DB_PORT на 33060 и проблема решена.

Ответ 7

В окнах просто отключите "Перспективы доступа пользователей" (UAC) .-open run -type msconfing и нажмите Enter. -go к инструментам и искать .UAC -set никогда не уведомлять -восстановите компьютер, он будет

Не забудьте сделать это через брандмауэр при появлении запроса.

Ответ 8

В моем случае я написал файл .env в DB_HOST адрес виртуальной машины, такой как по умолчанию для Homestead (192.168.10.10). Но он работает только для artisan migrate. Однако использование приложений для подключения этого db "удаленно" требует использования IP-адреса 127.0.0.1.

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

Ответ 9

Однажды у меня была такая же проблема, но в моем случае я работал на локальном сервере. Позже я обнаружил, что ошибка:

"PDOException with a message 'SQLSTATE[HY000] [2002] Соединение не может быть установлено, потому что целевая машина активно отказала ему ".

потому что я не запустил Apache and MySQL in Xampp панели управления Apache and MySQL in Xampp, поэтому приложение не смогло получить желаемый результат, потому что не было никакого соединения.

Сразу же я запустил Apache and MySQL в панели управления Xampp, the error was fixed. Надеюсь, что это работает для вас

Ответ 10

иногда может быть проблема с кешированием:

    php artisan config:clear

Ответ 11

Я получил эту ошибку с базой данных SQLite. В отличие от других сред, где файл базы данных может быть создан, если он не существует, в Laravel мне пришлось вручную создавать файл базы данных. Я создал его после запуска моего сервера; и это привело меня к этой ошибке. После перезапуска сервера все было в порядке.

Ответ 12

Проверьте свой XAMPP (если вы используете). Я получал одну и ту же ошибку снова и снова, пока не понял, что мой xampp не включен или отключен, поэтому я включил свой xampp, после чего он, наконец, работает.

Ответ 13

У меня была такая же проблема в моем собственном случае

run php artisan serve