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, 

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

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

У меня такая же проблема с 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 Services.

почему 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', 

для Ларавеля.

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

Если вы пытаетесь получить доступ к БД с другого сервера, то проблема с 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 

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

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

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

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