Доступ заборонено користувачеві 'farmtead' @ 'localhost' (використовуючи пароль: ТАК)


165

Я на Mac OS Yosemite за допомогою Laravel 5.0.

Перебуваючи в моєму місцевому середовищі, я бігаю, php artisan migrateя все отримую:

Доступ заборонено користувачеві 'farmtead' @ 'localhost' (використовуючи пароль: ТАК)

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

Ось мій .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=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
Я вважаю, ти використовуєш господарство VM? Я виявив, що це працюватиме лише тоді, коли ти знаходишся у ВМ. Ви можете потрапити на нього за допомогою ssh vagrant@127.0.0.1 -p 2222. Моя машина за замовчуванням не перекручується, що вказаний db працює.
— Джей Едвардс

Відповіді:


254

Причиною доступу до домену відмовлено в помилці користувача 'hometead' @ '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
Я працював для мене спасибі, одне питання, чому нам потрібно встановити наші дані про db на .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 і вже запустили локальний сервер розробників php artisan serve

І після того, як вище запущений сервер, ви змінюєте пов'язані з сервером бази даних речі у файлі .env. Як, наприклад, перехід від MySQL до SQLite або щось подібне. Вам потрібно переконатися, що ви зупинитесь над процесом, тобто Ctrcl Cчи на чомусь, що зупинить процес. А потім перезапустіть Artisan Serve знову, тобто у php artisan serveта оновіть веб-переглядач, і проблема, пов’язана з базою даних, буде виправлена. Це те, що працювало для мене для Laravel 5.3


о мій боже, це працювало для мене завдяки. але як я можу зупинитись, коли env змінився, чи є інструменти? це хороший досвід
— saber 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?
— Connor Leech

21

якщо ви використовуєте 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

Я не міг змусити це працювати, але grant all privileges on *.* to 'homestead'@'localhost' identified by 'secret';працював на мене.
— Райан

21

Якщо ви використовуєте веб-сервер PHP за замовчуванням (наприклад php artisan serve), вам потрібно перезапустити сервер після зміни значень файлу .env.


11

Коли ви встановлюєте Homestead, це створює базу даних "farmtead" за замовчуванням у віртуальній машині. Ви повинні SSH у ВМ homestead sshі запустити міграцію звідти. Якщо ви працюєте локально без VM, вам потрібно буде створити свою базу даних вручну. За замовчуванням базу даних слід називати "садиба", ім'я користувача - "садиба", а пароль - секрет.

перегляньте цю тему на laracasts або в цій публікації блогу, щоб отримати докладнішу інформацію


якщо ви отримуєте

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

спробуйте змінити "хост" у файлі /app/config/database.php з "localhost" на "127.0.0.1". Ви можете знайти більше деталей та інших виправлень тут у цій темі .

Також перевірте, чи вказали ви правильно unix_socket. перевірити цю нитку .


@ rangerover.js спробуйте змінити "хост" у файлі /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
— Sojan 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',

Це воно. Це працює для мене як моя четверта спроба. Сподіваюся, ці кроки комусь допоможуть. : D


Ого, що мене врятувало
— Петро Василев

11

У мене була така ж проблема, і врешті-решт виявилося, що мені просто довелося перезапустити сервер і запустити заново

Ctrl+ cтоді

php artisan serve

9

У Windows PC Дотримуйтесь нижче.


  1. Отримайте доступ до папки Root програми.

  2. Відредагуйте .env-файл

Відкрийте папку Root програми

Відредагуйте .env файл

Відредагуйте виділене та змініть ім’я користувача та пароль відповідно до імені бази даних відповідно.


9

в моєму випадку після перезавантаження мого сервера проблеми не було.

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

повторно запустіть команду "php artisan serve" .


8

Десь у майбутньому. Спробуйте спочатку очистити конфігурацію

php artisan config:clear. 

Закрийте всі вікна терміналу / cmd, а потім перезапустіть термінал / CMD, і це повинно позбутися повідомлення про помилку. Подивіться, чи працює.


спасибі багато, це працює для мене. я не знаю, чому ця помилка сталася. я просто закриваю все та перезавантажую і запускаю php artisan config: clear
— sabre tabatabaee yazdi

6

після config db перезапустіть:

 php artisan serve

Якщо сервіс активний перед встановленням конфігурації db.


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

Зрозумів! Увійдіть як корінь та надайте farmtead @ 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-файлу з налаштуваннями бази даних, очистіть параметри личинок шляхом "запуску php artisan config: clear"

B. Переконайтесь, що перезавантажте Ваш сервер apache / повторно виконайте команду "php artisan serve", щоб ваші налаштування набули чинності.


0

У мене була така ж проблема із використанням SQLite. Моя проблема полягала в тому, що DB_DATABASE вказував на неправильне розташування файлу.

Створіть файл sqlite за допомогою сенсорної команди та виведіть шлях до файлу за допомогою 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'через те, що ви змінюєте конфігурацію batabase як 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

З вашого питання, здається, ви керуєте садибою. У такому випадку переконайтеся, що ви виконуєте команди у своєму VM. Багато розробників, включаючи мене, часто роблять помилки і запускають ремісничі команди поза VM, які команди намагаються підключитися до нашої локальної бази даних, доступної через localhost, яка відрізняється від бази даних, що використовується у господарстві. Перейдіть до каталогу Homestead і запустіть

vagrant ssh

тоді CD в код, якщо саме там ви зберігаєте свої проекти та CD у свій проект і запускаєте, php artisan migrate again я сподіваюся, що це допоможе іншим людям.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.