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

89

Я нахожусь в Mac OS Yosemite, используя Laravel 5.0.

В моей локальной среде я запускаю php artisan migrate, я все время получаю:

Изображение 242

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

Вот мой .env

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

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

app\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

в приложении /database.php

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

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

Кроме того, в .env

DB_HOST=localhostDB_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 [email protected] -p 2222. Моя машина по умолчанию не работает, что говорит, что db работает.
Теги:
database-migration
laravel-5
homestead

21 ответ

7
Лучший ответ

Проверить, что 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',

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

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

137

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

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

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

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

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

php artisan config:clear

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

  • 0
    Я работал для меня, спасибо, один вопрос, почему мы должны установить наши подробные данные БД в файле .env, как мы делаем это в файле database.php
  • 1
    Может быть, вам нужно несколько сред, производство и местный.
Показать ещё 10 комментариев
26

Два способа решения проблемы

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

Откройте файл конфигурации базы данных (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 кажется избыточной.
  • 0
    Доза информации не избыточна, она использует функцию env для считывания значения из файла .env для защиты информации сервера.
22

TL;DR: Вам нужно остановить сервер Ctrl + c и начать заново с помощью php artisan serve


Подробнее:

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

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

  • 2
    Да, это сработало в моем случае спасибо
  • 0
    Работал для меня после нескольких часов поиска в Google .. спасибо
Показать ещё 2 комментария
15

если вы используете php artisan migrate НЕ из бродячего бокса, но с главной машины, то вы должны определить внутри .env ip окна 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
  • 0
    это тоже сработало для меня .. спасибо, чувак :)
  • 0
    Я не мог заставить это работать, но grant all privileges on *.* to 'homestead'@'localhost' identified by 'secret'; работал на меня.
12

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

  • 1
    Человек, спасибо большое! Это спасло меня. : D
  • 0
    @ dotslash, пожалуйста.
8

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

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


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

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

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

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

  • 0
    @ rangerover.js попробуйте изменить "host" в файле /app/config/database.php с "localhost" на "127.0.0.1"
  • 0
    @ rangerover.js проверьте эту ветку stackoverflow.com/questions/20723803/… . увидеть любое из решений вопроса.
Показать ещё 5 комментариев
7

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


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

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

Изображение 3553

Изображение 3554

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

6

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

Ctrl + c, затем

php artisan serve
  • 0
    его работа мне спасибо
5

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

php artisan config:clear. 

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

4

Получил! Войдите в систему как root и предоставите homestead @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

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

4

i используя laravel 5. * я figure У меня есть файл-вызов .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 или настраивал здесь свою конфигурацию.

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

3

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

3

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

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

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

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

Удачи!

2

Я найду решение

  • Перейдите в корневой каталог вашего приложения и откройте файл .env(в ubuntu может быть скрыто, а затем нажмите ctrl + h для отображения скрытых файлов) в вашем редакторе и измените настройку конфигурации базы данных. затем сохраните файл .env

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

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

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

2

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

  • 0
    На снимке экрана показано имя машины как MBP-bheng-aveniors . Это не ваша ВМ. Вам нужно SSH в Homestead ( $ homestead ssh ) и затем запустить $ php artisan migrate из этого сеанса SSH.
1

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

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

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

0

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

0

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

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню