SQLSTATE[HY000] [2002] Отказано в подключении в пределах усадьбы Laravel
Использование Mac OS X и Homestead 2.2.1 с Laravel 5.2.
В терминале (в пределах усадьбы в папке моего проекта) Я могу сделать php artisan, чтобы увидеть все доступные команды. Когда я пытаюсь запустить php artisan migrate, я получаю сообщение об ошибке подключения:SQLSTATE[HY000] [2002] Connection refused
Я настроил проект Laravel с этими .env настройками
DB_HOST=127.0.0.1
DB_DATABASE=tcv
DB_USERNAME=homestead
DB_PASSWORD=secret
Я также пробовал локальный хост для DB_HOST и корневой для DB_USERNAME и DB_PASSWORD. И все возможные вариации этих вместе взятых!
В Sequel Pro (приложение для управления БД) я МОГУ подключиться к этим настройкам
Host 127.0.0.1
Username homestead
Password secret
Database tcv
Port 33060
Но эта база данных явно пуста, потому что я не могу перейти к ней с терминала...
Насколько я могу понять, это проблема конфигурации, так как я могу подключиться к ней с помощью Sequel Pro. Но, честно говоря, я понятия не имею, что не так с настройкой.
Спасибо за помощь!!
РЕДАКТИРОВАТЬ
По какой-то причине я получаю то же самое SQLSTATE[HY000] [2002] Connection refused
ошибка при переносе моего проекта в MAMP и запуске миграции php artisan.
Теперь я совершенно потерян...
13 answers
Проблема
В Laravel у вас есть config/database.php
, где расположены все настройки для подключения. У вас также есть файл .env
в корневом каталоге вашего проекта (который все используют для экономии времени). Он содержит переменные, которые вы можете использовать для всего проекта.
В стандартном проекте L5 раздел MySQL config/database.php
выглядит так:
'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,
'engine' => null,
],
Обратите внимание, что порт не установлен!
Хотя в моем файле .env
я установил DB_PORT=33060
. Но это value (3306)
никогда не было прочитано в config/database.php
.
Так что не будь таким тупицей, как я, и забудь проверить файл database.php
.
ИСПРАВИТЬ
Просто добавьте
'port' => env('DB_PORT', 3306),
в свой config/database.php и установите это значение в .env вот так DB_PORT=33060
Я только что столкнулся с этим и обнаружил, что изменение этого в файле .env с 127.0.0.1 на localhost исправило это.
DB_HOST=локальный хост
У меня была такая проблема. При подключении к Sequel Pro мне нужно использовать 33060 в качестве порта, но в файле .env он должен быть 3306. У меня было 33060 в файле .env. Изменил его на 3306, и это сработало.
Если вы используете MAMP в mac OS, добавьте следующую строку в файл конфигурации базы данных mysql
'unix_socket' => env('DB_SOCKET', ''),
И в свой файл .env добавьте
DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock
У меня была та же проблема, попробуйте это работает
DB_HOST=localhost
Это простое решение. Ваша база данных mysql потеряла соединение с сервером. Если вы используете локальный сервер, запустите это в своем терминале:
mysqld
Это приведет к повторному подключению вашей базы данных. Затем (если вы используете homebrew) запустите:
brew services start mysql
Это автоматически подключит вашу базу данных при входе в систему.
Используйте localhost вместо 127.0.0.1 (в вашем файле .env), затем выполните команду "конфигурация php artisan: кэш"
В моем случае эта ошибка появилась как гром среди ясного неба. Глядя на эту загадочную ошибку, я понял, что пытался запустить команду за пределами виртуальной машины...
Возможно, что ваш 'mysql' не запущен или не подключен к порту '3306'
Еще одно решение для всех, у кого есть проблемы. У меня были правильные настройки, но по какой-то причине мои изменения не были обновлены. Laravel на самом деле кэширует конфигурационный файл (что я нахожу совершенно глупым).
Вот мое решение после обновления конфигураций:
php artisan config:clear
Если вы используете Homestead
, то вы должны запускать его с портом mysql по умолчанию. Поэтому вместо использования DB_PORT=33060
вы должны использовать DB_PORT=3306
в своем файле .env. Кроме того, не забудьте выполнить ваши команды php artisan migrate
в вашей установке homestead, и все должно быть в порядке.
Надеюсь, это поможет.
Единственное, что решило эту проблему для меня, - это указать детали подключения в config/database.php вместо файла .env. Надеюсь, это поможет
Внутри config/database.php поместите все конфигурации вместо того, чтобы оставлять.env. Вся функция env() будет заменена необработанным текстом. Вот так:
<pre>
'mysql' => [
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => '3306',
'database' => 'database_name',
'username' => 'username',
'password' => 'password',
'unix_socket' => '',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
</pre>