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