Доступ запрещен для пользователя 'hometead' @ 'localhost' (используя пароль: ДА)


165

Я использую Laravel 5.0 для Mac OS Yosemite.

В то время как в моем местном окружении, я бегу, php artisan migrateя продолжаю получать:

Доступ запрещен для пользователя 'hometead' @ 'localhost' (используя пароль: ДА)

конфигурация

Вот мой .env

APP_ENV=local
APP_DEBUG=true
APP_KEY=*****

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

Приложение \ Config \ 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'),
    'unix_socket' => '/tmp/mysql.sock',
    'charset'     => 'utf8',
    'collation'   => 'utf8_unicode_ci',
    'prefix'      => '',
    'strict'      => false,
    ]

Как мне избежать такого рода ошибок?

Я пробовал :


1

в app / database.php

Заменить localhostна127.0.0.1

'host'=> env('DB_HOST', 'localhost') ->'host' => env('DB_HOST', '127.0.0.1')

Также в .env

DB_HOST=localhost -> DB_HOST=127.0.0.1


2

Попробуйте указать среду

php artisan migrate --env=local


3

Проверьте, работает ли MySQL при запуске

mysqladmin -u homestead -p status Enter password: secret

я получил

Uptime: 21281 Threads: 3 Questions: 274 Slow queries: 0 Opens: 327 Flush tables: 1 Open tables: 80 Queries per second avg: 0.012

Что означает, что он работает.


4

Проверьте MySQL UNIX Socket ( этот шаг работает для меня )


1
Лучшей практикой было бы убедиться, что учетная запись действительно существует в mysql ... "Я нашел этот ключ на улице, и он не работает в замке моей входной двери. Как я могу изменить замок, чтобы ключ работал?"
Марк Б

1
Я так понимаю, вы используете усадьбу ВМ? Я обнаружил, что это будет работать только тогда, когда вы находитесь в виртуальной машине. Вы можете попасть на него через ssh vagrant@127.0.0.1 -p 2222. Моя машина по умолчанию не работает, что говорит, что db работает.
Джей Эдвардс,

Ответы:


254

Причиной отказа в доступе для пользователя 'homestead' @ 'localhost' ошибка laravel 5 является проблема с кэшированием файла .env.php, поскольку Laravel 5 использует конфигурацию среды в вашем файле .env.

1 . Перейдите в корневой каталог своего приложения и откройте файл .env (в Ubuntu он может быть скрыт, поэтому нажмите ctrl+, hчтобы показать скрытые файлы, а если вы находитесь в терминале, введите:, ls -aчтобы показать скрытые файлы) в редакторе и измените настройки конфигурации базы данных. затем сохраните файл .env

DB_HOST=localhost
DB_DATABASE=laravelu
DB_USERNAME=root
DB_PASSWORD=''

2 . затем перезапустите ваш сервер Apache / веб-сервер. и обновите свою страницу, и вы сделали

3 . Если проблема не устранена, попробуйте выполнить команду ниже, чтобы очистить старый файл кэша конфигурации.

php artisan config:clear

Теперь вы сделали с ошибкой


1
Я работал на меня, спасибо, один вопрос, почему мы должны установить наши подробности о БД в файле .env, как мы это делаем в файле database.php
Dipen

1
Может быть, вам нужно несколько сред, производства и местного.
Абду Тахири

5
Не переставая пытаться перезапустить Apache, когда я все время использовал «php artisan serve», я бы посоветовал вам не совершать ту же ошибку, что и я> <
Carlton

1
Не работает, и теперь я получаю PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu'._.
черный

1
Я попытался изменить .envи config:clear cache:clearвсе команды, перезапустил, apacheно все еще получал ту же проблему.
Лузан

67

TLDR: вам нужно остановить сервер Ctrl+ cи начать снова, используяphp artisan serve


Подробности:

Если вы используете Laravel и уже запустили локальный сервер Dev php artisan serve

И после того, как вышеупомянутый сервер уже запущен, вы изменяете материал, связанный с сервером базы данных, в файле .env. Как переход с MySQL на SQLite или что-то еще. Вам необходимо убедиться, что вы остановили вышеуказанный процесс, т.е. Ctrcl Cчто-нибудь, что остановило процесс. Затем перезапустите Artisan Serve, т. Е. Y, php artisan serveи обновите браузер, и ваша проблема, связанная с базой данных, будет исправлена. Вот что у меня сработало для Laravel 5.3


Боже мой, это сработало для меня, спасибо. но как я могу остановиться, когда env изменился, есть ли инструменты? это хороший опыт
Sabre Tabatabaee Yazdi

31

Два способа решить это

Первый способ (не рекомендуется)

Откройте файл конфигурации базы данных (laravel_root / config / database.php) и найдите приведенный ниже блок кода.

        'host'      => env('DB_HOST', 'localhost'),
        'database'  => env('DB_DATABASE', 'blog'),
        'username'  => env('DB_USERNAME', 'root'),
        'password'  => env('DB_PASSWORD', ''),

Измените блок кода, как показано ниже

        'host'      => 'yourHostName',
        'database'  => 'YourDatabastName',
        'username'  => 'YoutDatabaseUsername',
        'password'  => 'YourDatabasePassword',

Второй способ (рекомендуется Laravel)

Проверьте, есть ли в вашем корне Laravel файл .env, если он не существует, поищите .env.example, скопируйте / переименуйте его в .env, после чего файл выглядит как удар!

APP_ENV=local
APP_DEBUG=true
APP_KEY=someRandomNumber

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

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null

Измените приведенный ниже блок следующим образом

DB_HOST=yourHostName
DB_DATABASE=yourDatabaseName
DB_USERNAME=yourDatabaseUsername
DB_PASSWORD=youPassword

Теперь все будет работать нормально.


1
Какой смысл в этом файле? Эта информация root/config/database.phpпредставляется излишней.
Холтер

Доза информации не избыточна, она использует функцию env для считывания значения из файла .env для защиты информации сервера.
absiddiqueLive

Как найти или создать имя хоста, имя базы данных, имя пользователя и пароль с помощью Homestead?
Коннор Лич,

21

если вы используете php artisan migrateNOT from vagrant box, а с хост-машины, то вы должны определить внутри .envip коробки192.168.10.10

и, очевидно, установить разрешение на усадьбу пользователя с вашего IP что-то вроде

grant all privileges on *.* to 'homestead'@% identified by 'secret';

в .envфайле

DB_HOST=192.168.10.10
DB_DATABASE=homestead
DB_USERNAME=homestead

Я не мог заставить это работать, но grant all privileges on *.* to 'homestead'@'localhost' identified by 'secret';работал на меня.
Райан

21

Если вы используете веб-сервер PHP по умолчанию (например php artisan serve), вам необходимо перезапустить сервер после изменения значений файла .env.


11

Когда вы устанавливаете Homestead, в VM создается база данных по умолчанию «hometead». Вы должны подключиться к виртуальной машине через SSH homestead sshи запустить миграцию оттуда. Если вы работаете локально без ВМ, вам нужно будет создать базу данных вручную. По умолчанию база данных должна называться усадьба, имя пользователя - усадьба, а пароль - секретный.

проверьте эту тему на laracasts или этот блог для более подробной информации


если вы получаете

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

попробуйте изменить "host" в файле /app/config/database.php с "localhost" на "127.0.0.1". Вы можете найти более подробную информацию и другие исправления здесь в этой теме .

Также проверьте, правильно ли вы указали unix_socket. проверьте эту тему .


@ rangerover.js попробуйте изменить "host" в файле /app/config/database.php с "localhost" на "127.0.0.1"
Sojan V Jose

@ rangerover.js проверьте эту ветку stackoverflow.com/questions/20723803/… . увидеть любое из решений вопроса.
Sojan V Jose

@ rangerover.js также проверяет, работает ли служба mysql :)
Sojan V Jose

@ rangerover.js может проверить ваш unix_socket? stackoverflow.com/a/25649930/939299
Соян V Хосе

1
Это наконец-то работать на 4-й попытался. Пожалуйста, удалите все свои комментарии и включите эту ссылку stackoverflow.com/a/25649930/939299 как часть вашего ответа, потому что это мне поможет.
cyber8200

11

Проверьте MySQL UNIX Socket

Найти местоположение unix_socket, используя MySQL

mysql -u homestead -p

mysql> show variables like '%sock%';
+-----------------------------------------+-----------------------------+
| Variable_name                           | Value                       |
+-----------------------------------------+-----------------------------+
| performance_schema_max_socket_classes   | 10                          |
| performance_schema_max_socket_instances | 322                         |
| socket                                  | /var/run/mysqld/mysqld.sock |
+-----------------------------------------+-----------------------------+
3 rows in set (0.00 sec)

Затем я иду в config / database.php

Я обновляю эту строку: 'unix_socket' => '/tmp/mysql.sock',

к: 'unix_socket' => '/var/run/mysqld/mysqld.sock',

Вот и все. Это работает для меня как моя 4-я попытка. Я надеюсь, что эти шаги помогут кому-то. : D


Ого, это меня спасло
Петр Васильев

11

У меня была такая же проблема и в итоге оказалось, что мне просто нужно было перезагрузить сервер и начать заново

Ctrl+ cтогда

php artisan serve

9

В Windows PC следуйте ниже.


  1. Доступ к корневой папке вашего приложения.

  2. Отредактируйте файл .env

Доступ к корневой папке вашего приложения

Отредактируйте файл .env

Отредактируйте выделенное и измените Имя пользователя и пароль и соответственно Имя базы данных.


9

в моем случае после перезапуска моего сервера проблема исчезла.

выйти / закрыть команду "php artisan serve" и

перезапустите команду "php artisan serve" .


8

Когда-нибудь в будущем. Попробуйте сначала очистить ваш конфиг

php artisan config:clear. 

Закройте все окна терминала / cmd, а затем перезапустите терминал / CMD, и это должно избавить от сообщения об ошибке. Посмотри, работает ли это.


Большое спасибо, это работает для меня. Я не знаю, почему произошла эта ошибка. я просто закрываю все и перезагружаю и запускаю конфигурацию php artisan: clear
saber tabatabaee yazdi

6

после конфиг дб перезапустите:

 php artisan serve

Если подача активна перед настройкой db config.


5

я использую laravel 5. * я полагаю, у меня есть вызов файла .envв корне проекта, который выглядит примерно так:

APP_ENV=local
APP_DEBUG=true
APP_KEY=SomeRandomString

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

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

И это закончилось записью конфигурации bd, так что вы можете удалить все эти конфигурационные переменные, чтобы laravel взял конфигурацию в / config или настроил вашу конфигурацию здесь.

Я сделал второе, и это работает для меня :)


5

Понял! Войдите в систему как root и предоставьте усадьбе @ localhost права на все.

С вашего терминала:

$ homestead ssh

$ mysql -u root -p

Enter password: secret

mysql> grant all privileges on *.* to 'homestead'@'localhost' identified by 'secret';

Query OK, 0 rows affected (0.00 sec)
exit

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


5

После изменения .env с новой конфигурацией, вы должны остановить сервер и запустить его снова (php artisan serve). Причина, по которой Laravel получает среду при инициализации сервера. Если вы не перезагрузите компьютер, вы измените .env, спрашивая себя, почему изменения не происходят !!


5

Все, что вам нужно сделать, это изменить файл .env .

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

Перед DB_DATABASE напишите имя базы данных, а перед DB_USERNAME используйте root .


4

Я просто хотел опубликовать это, потому что эта проблема расстроила меня около 3 часов сегодня. Я не пробовал ни один из методов, перечисленных в других ответах, хотя все они кажутся разумными. На самом деле, я как раз собирался пройтись по каждому из предложенных выше решений, но каким-то образом я получил этот импульс вдохновения. Вот что помогло мне вернуться на работу - YMMV:

1) Найдите свой файл .env. 2) Переименуйте ваш файл .env во что-то другое. Laravel 5 должен использовать этот файл как переопределение для настроек где-то еще в фреймворке. Я переименовал мой в .env.old 3) Возможно, вам придется перезапустить ваш веб-сервер, но мне это не нужно.

Удачи!


3

Вы должны запустить $ php artisan migrateкоманду из Homestead, а не с Mac.


Ваш снимок экрана показывает имя машины как MBP-bheng-aveniors. Это не ваша ВМ. Вам нужно подключиться по SSH к Homestead ( $ homestead ssh), а затем запустить $ php artisan migrateиз этого сеанса SSH.
Мартин Бин

3

Проверьте файл " .env " в корневой папке. это правильно?

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

3

я нашел решение

  1. Перейдите в корневой каталог вашего приложения и откройте файл .env (в Ubuntu он может быть скрыт, поэтому нажмите Ctrl + H, чтобы показать скрытые файлы) в редакторе и измените настройки конфигурации базы данных. затем сохраните файл .env

  2. затем перезапустите ваш сервер Apache / веб-сервер. и обновите свою страницу, и вы сделали

  3. Если проблема не устранена, попробуйте выполнить команду ниже, чтобы очистить старый файл кэша конфигурации.

Это сработало для меня GL ...


3

просто измените эти вещи в файле .env вашей корневой папки.

DB_DATABASE=your_db_name
DB_USERNAME=your_db_user_name
DB_PASSWORD='your_db_password'

Это сработало для меня.


3

в моем случае (laravel 5+) мне пришлось заключить пароль в одинарные кавычки и очистить кеш конфигурации:

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=user_name
DB_PASSWORD='password'

и затем запустите:

php artisan config:clear

1

Войдите в MYSQL - используйте базу данных mysql.

Выберите * из пользователя;

Убедитесь, что ваш столбец HOST правильный. Это должен быть хост, с которого вы подключаетесь (ваш сервер приложений), будь то IP-адрес или DNS-имя. Также «%» будет работать (имеется в виду подстановочный знак), но не будет безопасным.


1

Проверьте файл .env, если вы отредактировали какую-либо переменную, пожалуйста, перезапустите сервер laravel, и ваша проблема будет решена


1

A. После обновления файла .env настройками базы данных очистите параметр larval, запустив php artisan config: clear.

Б. Пожалуйста, убедитесь, что вы перезапускаете сервер apache / повторно запускаете команду «php artisan serve», чтобы ваши настройки вступили в силу.


0

У меня была такая же проблема с использованием SQLite. Моя проблема заключалась в том, что DB_DATABASE указывал на неправильное местоположение файла.

Создайте файл sqlite с помощью команды touch и выведите путь к файлу с помощью php artisan tinker.

$ touch database/database.sqlite
$ php artisan tinker
Psy Shell v0.8.0 (PHP 5.6.27  cli) by Justin Hileman
>>> database_path(‘database.sqlite’)
=> "/Users/connorleech/Projects/laravel-5-rest-api/database/database.sqlite"

Затем выведите точный путь к переменной DB_DATABASE.

DB_CONNECTION=sqlite
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=/Users/connorleech/Projects/laravel-5-rest-api/database/database.sqlite
DB_USERNAME=homestead
DB_PASSWORD=secret

Без правильного пути вы получите ошибку отказа в доступе


0

Если у вас есть ошибка, возвращающая что-то подобное, PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu'это связано с тем, что вы меняете конфигурацию вашей базы данных как DB_DATABASE=laravelu. Так что сейчас вы либо:

  1. Изменить илиDB_DATABASE=[yourdatabase]
  2. создайте базу данных с именем laraveluв вашем phpmyadmin

это должно быть в состоянии решить это


0

В моем случае ошибка была «вызвана» моей конфигурацией Homestead / Vagrant, о которой я забыл :), пытаясь запустить миграцию только из командной строки.

В случае использования среды Homestead Vagrant Box вы должны запустить миграцию изнутри вашего компьютера Homestead (после подключения к нему с помощью ssh:), vagrant@192.168.10.10:22тогда права доступа будут в порядке и разрешат запуск миграции.


0

От твоего вопроса, кажется, ты управляешь усадьбой. В этом случае убедитесь, что вы выполняете команды на своей виртуальной машине. Многие разработчики, в том числе и я, часто ошибаются и запускают кустарные команды вне виртуальной машины, которые команды пытаются подключить к нашей локальной базе данных, доступной через localhost, которая отличается от базы данных, используемой hometead. Перейдите в каталог Homestead и запустите

vagrant ssh

Затем перейдите к коду, если вы храните свои проекты, и перейдите к своему проекту и запустите его, php artisan migrate again надеюсь, это поможет другим людям.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.