Truy cập bị từ chối đối với người dùng 'homestead' @ 'localhost' (sử dụng mật khẩu: CÓ)


165

Tôi đang dùng Mac OS Yosemite bằng cách sử dụng Laravel 5.0.

Trong khi ở môi trường địa phương của tôi , tôi chạy php artisan migratetôi tiếp tục nhận được:

Truy cập bị từ chối đối với người dùng 'homestead' @ 'localhost' (sử dụng mật khẩu: CÓ)

Cấu hình

Đây là .env của tôi

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

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

ứng dụng \ config \ cơ sở dữ liệu.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,
    ]

Làm thế nào để tôi tránh loại lỗi này?

Tôi đã thử:


1

trong ứng dụng / cơ sở dữ liệu.php

Thay thế localhostbằng127.0.0.1

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

Ngoài ra, trong .env

DB_HOST=localhost -> DB_HOST=127.0.0.1


2

Thử chỉ định môi trường

php artisan migrate --env=local


3

Kiểm tra xem MySQL có chạy bằng chạy không

mysqladmin -u homestead -p status Enter password: secret

tôi đã nhận

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

Có nghĩa là nó đang chạy.


4

Kiểm tra socket UNIX UNIX ( Bước này hoạt động với tôi )


1
cách tốt nhất là đảm bảo rằng tài khoản thực sự tồn tại trong mysql ... "Tôi đã tìm thấy khóa này trên đường phố và nó không hoạt động trong khóa cửa trước của tôi. Làm cách nào tôi có thể thay đổi khóa để làm cho khóa hoạt động?"
Marc B

1
Tôi nhận nó bạn đang sử dụng VM homestead? Tôi đã thấy rằng nó sẽ chỉ hoạt động khi bạn ở trong VM. bạn có thể truy cập thông qua ssh vagrant@127.0.0.1 -p 2222. Máy mặc định của tôi không có twig cho biết db đang chạy.
Jay Edwards

Câu trả lời:


254

Lý do truy cập bị từ chối đối với lỗi 'homestead' @ 'localhost' laravel 5 của người dùng là do sự cố bộ đệm của tệp .env.php vì Laravel 5 đang sử dụng cấu hình dựa trên môi trường trong tệp .env của bạn.

1 . Chuyển đến thư mục gốc ứng dụng của bạn và mở tệp .env (Trong Ubuntu có thể bị ẩn, vì vậy hãy nhấn ctrl+ hđể hiển thị các tệp ẩn & nếu bạn đang ở trong thiết bị đầu cuối, hãy gõ: ls -ađể hiển thị các tệp ẩn) trong trình chỉnh sửa của bạn và thay đổi cài đặt cấu hình cơ sở dữ liệu. sau đó lưu tệp .env của bạn

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

2 . sau đó khởi động lại máy chủ apache / máy chủ web của bạn. và làm mới trang của bạn và bạn đã hoàn thành

3 . Nếu vẫn gặp sự cố, hãy chạy lệnh bên dưới để xóa tệp bộ đệm cấu hình cũ.

php artisan config:clear

Bây giờ bạn đã làm xong với lỗi


1
Tôi đã làm việc cho tôi cảm ơn, một câu hỏi tại sao chúng tôi phải đặt chi tiết db của chúng tôi trên tệp .env khi chúng tôi làm điều đó trên tệp cơ sở dữ
liệu.php

1
có lẽ tôi cần nhiều môi trường ,, sản xuất và địa phương.
Abdou Tahiri

5
Giữ cố gắng khởi động lại Apache khi tôi sử dụng "nghệ nhân php phục vụ" toàn bộ thời gian, tôi sẽ đề nghị bạn không mắc lỗi tương tự như tôi> <
Carlton

1
Không hoạt động, và bây giờ tôi nhận được PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu'._.
Đen

1
Tôi đã thử thay đổi .envconfig:clear cache:cleartất cả các lệnh, khởi động lại apachenhưng vẫn gặp vấn đề tương tự.
Luzan Baral

67

TLDR: Bạn cần dừng máy chủ Ctrl+ cvà bắt đầu lại bằng cách sử dụngphp artisan serve


Chi tiết:

Nếu bạn đang sử dụng Laravel và đã khởi động máy chủ dev cục bộ php artisan serve

Và sau khi máy chủ ở trên đã chạy, bạn thay đổi công cụ liên quan đến máy chủ cơ sở dữ liệu của mình trong tệp .env. Giống như chuyển từ MySQL sang SQLite hoặc một cái gì đó. Bạn cần chắc chắn rằng bạn dừng quá trình trên tức là Ctrcl Choặc bất cứ điều gì dừng quá trình. Và sau đó khởi động lại Artisan Serve một lần nữa tức là y php artisan servevà làm mới trình duyệt của bạn và vấn đề của bạn liên quan đến cơ sở dữ liệu sẽ được khắc phục. Đây là những gì làm việc cho tôi cho Laravel 5.3


Trời ơi cái này làm việc cho tôi cảm ơn. Nhưng làm thế nào tôi có thể dừng lại khi env thay đổi có công cụ nào không? đây là kinh nghiệm tốt
saber tabatabaee yazdi

31

Hai cách để giải quyết nó

Cách thứ nhất (Không nên dùng)

Mở tệp cấu hình cơ sở dữ liệu của bạn (laravel_root / config / database.php) và tìm kiếm khối mã bên dưới.

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

Thay đổi khối mã như dưới đây

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

Cách thứ hai (Được đề xuất bởi Laravel)

Kiểm tra gốc Laravel của bạn có một cuộc gọi tệp .env nếu không tồn tại, hãy tìm .env.example, sao chép / đổi tên nó thành .env sau khi tệp đó xuất hiện!

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

Sửa đổi khối bên dưới như sau

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

Bây giờ nó sẽ hoạt động tốt.


1
Điểm của tập tin này là gì? Thông tin này root/config/database.phpcó vẻ dư thừa.
Halter

Liều thông tin không dư thừa, nó sử dụng hàm env để đọc giá trị từ tệp .env để bảo mật thông tin máy chủ.
absiddiqueLive

Làm thế nào để bạn tìm hoặc tạo tên máy chủ, tên cơ sở dữ liệu, tên người dùng và mật khẩu với Homestead?
Connor Leech

21

nếu bạn đang sử dụng php artisan migrateKHÔNG từ hộp vagrant mà từ máy chủ thì bạn phải xác định bên trong .envip của hộp192.168.10.10

và rõ ràng đặt quyền cho người dùng ở nhà từ ip của bạn một cái gì đó như

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

trong .envtập tin

DB_HOST=192.168.10.10
DB_DATABASE=homestead
DB_USERNAME=homestead

Tôi không thể làm việc đó, nhưng grant all privileges on *.* to 'homestead'@'localhost' identified by 'secret';làm việc cho tôi.
Ryan

21

Nếu bạn đang sử dụng máy chủ web mặc định của PHP (ví dụ php artisan serve), bạn cần khởi động lại máy chủ của mình sau khi thay đổi giá trị tệp .env.


11

Khi bạn cài đặt Homestead, điều này sẽ tạo ra một cơ sở dữ liệu "homestead" mặc định trong VM. Bạn nên SSH vào VM homestead sshvà chạy di chuyển từ đó. Nếu bạn đang làm việc tại địa phương không có VM, bạn sẽ cần tạo cơ sở dữ liệu của mình theo cách thủ công. Theo mặc định, cơ sở dữ liệu nên được gọi là homestead, tên người dùng là homestead và mật khẩu là bí mật.

kiểm tra chủ đề này trên laracasts hoặc bài đăng trên blog này để biết thêm chi tiết


nếu bạn đang nhận được

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

hãy thử thay đổi "máy chủ" trong tệp /app/config/database.php từ "localhost" thành "127.0.0.1". bạn có thể tìm thêm chi tiết và các bản sửa lỗi khác ở đây trên chuỗi này .

Ngoài ra kiểm tra xem bạn đã chỉ định chính xác unix_socket. kiểm tra chủ đề này .


@ rangerover.js thử thay đổi "máy chủ" trong tệp /app/config/database.php từ "localhost" thành "127.0.0.1"
Sojan V Jose

@ rangerover.js kiểm tra chủ đề này stackoverflow.com/questions/20723804/ . xem bất kỳ giải pháp nào
Sojan V Jose

@ rangerover.js cũng kiểm tra xem dịch vụ mysql có chạy hay không :)
Sojan V Jose

@ rangerover.js có thể kiểm tra unix_socket của bạn không? stackoverflow.com/a/25649930/939299
Sojan V Jose

1
Nó cuối cùng đã làm việc trên 4 đã cố gắng. Vui lòng xóa tất cả các nhận xét của bạn và bao gồm liên kết này stackoverflow.com/a/25649930/939299 như một phần câu trả lời của bạn vì nó giúp tôi.
cyber8200

11

Kiểm tra ổ cắm UNIX UNIX

Tìm vị trí unix_socket bằng 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)

Sau đó, tôi đi đến config / database.php

Tôi cập nhật dòng này: 'unix_socket' => '/tmp/mysql.sock',

đến : 'unix_socket' => '/var/run/mysqld/mysqld.sock',

Đó là nó. Nó hoạt động cho lần thử thứ 4 của tôi. Tôi hy vọng những bước này sẽ giúp được ai đó. : D


Ồ, điều đó đã cứu tôi :)
Petar Vasilev

11

Tôi đã có cùng một vấn đề và cuối cùng hóa ra tôi chỉ cần khởi động lại máy chủ và bắt đầu lại

Ctrl+ crồi

php artisan serve

9

Trong Windows PC Thực hiện theo bên dưới.


  1. Truy cập thư mục Root của ứng dụng của bạn.

  2. Chỉnh sửa tệp .env

Truy cập thư mục Root của ứng dụng của bạn

Chỉnh sửa tệp .env

Chỉnh sửa Tô sáng và thay đổi Tên người dùng và mật khẩu adn Tên cơ sở dữ liệu tương ứng.


9

trong trường hợp của tôi, sau khi khởi động lại máy chủ của tôi, vấn đề đã biến mất.

thoát / đóng lệnh "php artisan phục vụ"

chạy lại lệnh "php artisan phục vụ" lệnh .


8

Đôi khi trong tương lai. Hãy thử xóa cấu hình của bạn trước

php artisan config:clear. 

Đóng tất cả các cửa sổ terminal / cmd và sau đó khởi động lại terminal / CMD và điều này sẽ thoát khỏi thông báo lỗi. Xem nếu nó hoạt động.


cảm ơn rất nhiều điều này đã làm việc cho tôi tôi không biết tại sao lỗi này xảy ra. tôi chỉ cần đóng tất cả và tải lại và chạy php
artisan

6

Sau khi cấu hình db khởi động lại:

 php artisan serve

Nếu phục vụ được kích hoạt trước khi đặt cấu hình db.


5

tôi đang sử dụng laravel 5. * tôi hình tôi có một cuộc gọi tệp .envtrong thư mục gốc của dự án trông giống như thế này:

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

Và đó là bằng cách viết cấu hình bd để bạn có thể xóa các vars cấu hình đó để laravel lấy cấu hình dưới / config hoặc thiết lập cấu hình của bạn ở đây.

Tôi đã làm thứ hai và nó làm việc cho tôi :)


5

Hiểu rồi! Đăng nhập với quyền root và cấp homestead @ localhost quyền đối với mọi thứ.

Từ thiết bị đầu cuối của bạn:

$ 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

Bây giờ người dùng thường xuyên ở nhà dân có quyền truy cập vào tất cả các bảng của bạn và do đó, sẽ có thể chạy những thứ như di chuyển.


5

Sau khi thay đổi .env với cấu hình mới, bạn phải dừng máy chủ và chạy lại (php artisan phục vụ). Nguyên nhân laravel có được môi trường khi khởi tạo máy chủ. Nếu bạn không khởi động lại, bạn sẽ thay đổi .env tự hỏi tại sao những thay đổi không diễn ra !!


5

Tất cả bạn phải làm là thay đổi tập tin .env của bạn .

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

Ở phía trước DB_DATABASE, hãy viết tên của cơ sở dữ liệu và trước DB_USERNAME, sử dụng root .


4

Tôi chỉ muốn đăng bài này vì vấn đề này làm tôi thất vọng trong khoảng 3 giờ hôm nay. Tôi chưa thử bất kỳ phương pháp nào được liệt kê trong các câu trả lời khác, mặc dù chúng đều có vẻ hợp lý. Trên thực tế, tôi chỉ định thử trải qua từng giải pháp được đề xuất ở trên, nhưng bằng cách nào đó tôi đã có được cảm hứng này. Đây là những gì làm việc cho tôi để giúp tôi trở lại làm việc - YMMV:

1) Tìm tập tin .env của bạn. 2) Đổi tên tập tin .env của bạn thành một cái gì đó khác. Laravel 5 phải được sử dụng tệp này làm ghi đè cho các cài đặt ở nơi khác trong khung. Tôi đã đổi tên của tôi thành .env.old 3) Bạn có thể cần phải khởi động lại máy chủ web của mình, nhưng tôi không phải làm vậy.

Chúc may mắn!


3

Bạn phải chạy $ php artisan migratelệnh từ trong Homestead, không phải Mac của bạn.


Ảnh chụp màn hình của bạn hiển thị tên máy là MBP-bheng-aveniors. Đó không phải là VM của bạn. Bạn cần SSH vào Homestead ( $ homestead ssh) và sau đó chạy $ php artisan migratetừ trong phiên SSH đó.
Martin Bean

3

Kiểm tra tệp " .env " của bạn trong thư mục gốc. nó có đúng không?

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

3

tôi đã tìm ra giải pháp

  1. Chuyển đến thư mục gốc ứng dụng của bạn và mở tệp .env (Trong ubfox có thể bị ẩn, vì vậy hãy nhấn ctrl + h để hiển thị các tệp ẩn) trong trình chỉnh sửa của bạn và thay đổi cài đặt cấu hình cơ sở dữ liệu. sau đó lưu tệp .env của bạn

  2. sau đó khởi động lại máy chủ apache / máy chủ web của bạn. và làm mới trang của bạn và bạn đã hoàn thành

  3. Nếu vẫn gặp sự cố, hãy chạy lệnh bên dưới để xóa tệp bộ đệm cấu hình cũ.

Điều này làm việc cho tôi ...


3

chỉ cần thay đổi những thứ này trong tệp .env của thư mục gốc của bạn.

DB_DATABASE=your_db_name
DB_USERNAME=your_db_user_name
DB_PASSWORD='your_db_password'

Nó làm việc cho tôi.


3

trong trường hợp của tôi (laravel 5+) tôi đã phải bọc mật khẩu của mình trong dấu ngoặc kép đơn và xóa bộ đệm cấu hình:

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

và sau đó chạy:

php artisan config:clear

1

Đăng nhập vào MYSQL - sử dụng cơ sở dữ liệu mysql.

Chọn * từ Người dùng;

Hãy chắc chắn rằng cột HOST của bạn là chính xác. Nó phải là máy chủ mà bạn đang kết nối từ (máy chủ ứng dụng của bạn) có thể là địa chỉ IP hoặc tên DNS. Ngoài ra, '%' sẽ hoạt động (có nghĩa là ký tự đại diện) nhưng sẽ không an toàn.


1

Kiểm tra tệp .env của bạn, nếu bạn đã chỉnh sửa bất kỳ biến nào, vui lòng khởi động lại máy chủ laravel và vấn đề của bạn sẽ được giải quyết


1

A. Sau khi cập nhật tệp .env với cài đặt cơ sở dữ liệu, hãy xóa cài đặt ấu trùng bằng cách "chạy php artisan config: clear"

B. Vui lòng đảm bảo rằng bạn khởi động lại máy chủ apache / chạy lại lệnh "php artisan phục vụ" để cài đặt của bạn có hiệu lực.


0

Tôi đã có cùng một vấn đề bằng cách sử dụng SQLite. Vấn đề của tôi là DB_DATABASE đã chỉ đến vị trí tệp sai.

Tạo tệp sqlite bằng lệnh cảm ứng và xuất đường dẫn tệp bằng cách sử dụng 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"

Sau đó xuất đường dẫn chính xác đến biến 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

Nếu không có đường dẫn chính xác, bạn sẽ nhận được lỗi từ chối truy cập


0

Nếu bạn gặp lỗi khi trả về một cái gì đó giống như PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu'là do bạn đang thay đổi cấu hình batabase của mình DB_DATABASE=laravelu. Vì vậy, bây giờ bạn cũng vậy:

  1. Thay đổi hoặcDB_DATABASE=[yourdatabase]
  2. tạo một cơ sở dữ liệu được gọi laravelutrong phpmyadmin của bạn

điều này sẽ có thể giải quyết nó


0

Trong trường hợp của tôi, lỗi là do "cấu hình" Homestead / Vagrant của tôi mà tôi đã quên :) cố gắng chạy di chuyển chỉ từ dòng lệnh.

Trong trường hợp sử dụng môi trường Homestead Vagrant Box, bạn nên chạy di chuyển từ bên trong máy Homestead của mình (sau khi kết nối với nó bằng ssh vagrant@192.168.10.10:22:) thì quyền truy cập sẽ ổn và sẽ cho phép di chuyển chạy.


0

Từ câu hỏi của bạn, có vẻ như bạn đang chạy homestead. Trong trường hợp đó, đảm bảo bạn đang chạy các lệnh trong VM. Nhiều nhà phát triển trong đó có tôi thường mắc lỗi và chạy các lệnh thủ công bên ngoài VM mà các lệnh sẽ cố gắng kết nối với cơ sở dữ liệu cục bộ của chúng tôi có thể truy cập thông qua localhost, khác với cơ sở dữ liệu được sử dụng bởi homestead. Cd vào thư mục Homestead của bạn và chạy

vagrant ssh

sau đó cd thành mã nếu đó là nơi bạn giữ các dự án và cd vào dự án của bạn và chạy, php artisan migrate again tôi hy vọng điều này sẽ giúp ích cho người khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.