Akses ditolak untuk 'homestead' pengguna '@' localhost '(menggunakan kata sandi: YES)

165

Saya menggunakan Yosemite Mac OS menggunakan Laravel 5.0.

Sementara di lingkungan lokal saya , saya menjalankan php artisan migratesaya terus mendapatkan:

Akses ditolak untuk 'homestead' pengguna '@' localhost '(menggunakan kata sandi: YES)

Konfigurasi

Ini .env saya

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,
    ]

Bagaimana saya menghindari kesalahan semacam ini?

Saya sudah mencoba:


1

di app / database.php

Ganti localhostdengan127.0.0.1

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

Juga, dalam .env

DB_HOST=localhost -> DB_HOST=127.0.0.1


2

Coba tentukan lingkungan

php artisan migrate --env=local


3

Periksa untuk melihat apakah MySQL berjalan dengan menjalankan

mysqladmin -u homestead -p status Enter password: secret

saya mendapatkan

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

Yang berarti sedang berjalan.


4

Periksa MySQL UNIX Socket ( Langkah ini cocok untuk saya )

cyber8200
sumber
1
Praktik terbaik adalah memastikan bahwa akun itu benar-benar ada di mysql ... "Saya menemukan kunci ini di jalan, dan itu tidak berfungsi di kunci pintu depan saya. Bagaimana saya bisa mengubah kunci untuk membuat kunci berfungsi?"
Marc B
1
Saya kira Anda menggunakan VM homestead? Saya telah menemukan bahwa itu hanya akan berfungsi ketika Anda berada di VM. Anda dapat mengaksesnya melalui ssh [email protected] -p 2222. mesin default saya tidak ranting yang mengatakan db sedang berjalan.
Jay Edwards

Jawaban:

254

Alasan akses ditolak untuk kesalahan pengguna 'homestead' @ 'localhost' laravel 5 adalah masalah caching dari file .env.php karena Laravel 5 menggunakan konfigurasi berbasis lingkungan dalam file .env Anda.

1 . Buka direktori root aplikasi Anda dan buka file .env (Di ubuntu mungkin disembunyikan jadi tekan ctrl+ huntuk menampilkan file tersembunyi & jika Anda berada di terminal lalu ketik: ls -auntuk menampilkan file tersembunyi) di editor Anda dan ubah pengaturan konfigurasi basis data. lalu simpan file .env Anda

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

2 . kemudian restart server apache / server web Anda. dan menyegarkan halaman Anda dan Anda telah selesai

3 . Jika masih masalah coba jalankan perintah di bawah ini untuk menghapus file cache konfigurasi lama.

php artisan config:clear

Sekarang Anda selesai dengan kesalahan

Abdou Tahiri
sumber
1
Saya bekerja untuk saya, terima kasih, satu pertanyaan mengapa kita harus mengatur detail db pada file .env seperti yang kita lakukan pada file database.php
Dipen
1
mungkin saya butuh beberapa lingkungan ,, produksi dan lokal.
Abdou Tahiri
5
Terus mencoba me-restart Apache ketika saya menggunakan "php artisan serve" sepanjang waktu, saya sarankan Anda tidak membuat kesalahan yang sama dengan saya> <
Carlton
1
Tidak berfungsi, dan sekarang saya dapatkan PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu'._.
Hitam
1
Saya mencoba mengubah .envdan config:clear cache:clearsemua perintah, restart apachetetapi masih mendapatkan masalah yang sama.
Luzan Baral
67

TLDR: Anda harus menghentikan server Ctrl+ cdan mulai lagi menggunakanphp artisan serve


Detail:

Jika Anda menggunakan Laravel, dan sudah memulai server dev lokal sudah php artisan serve

Dan setelah server di atas sudah berjalan, Anda mengubah hal-hal terkait server database Anda dalam file .env. Seperti berpindah dari MySQL ke SQLite atau apalah. Anda perlu memastikan bahwa Anda menghentikan proses di atas yaitu Ctrcl Catau apa pun yang menghentikan proses. Dan kemudian restart Artisan Serve lagi yaitu y php artisan servedan segarkan browser Anda dan masalah Anda yang terkait dengan basis data akan diperbaiki. Inilah yang bekerja untuk saya untuk Laravel 5.3

Mohsin
sumber
oh my god, ini berhasil buat saya, terima kasih. tetapi bagaimana saya bisa berhenti ketika env berubah apakah ada alat? ini pengalaman yang bagus
saber tabatabaee yazdi
31

Dua cara untuk mengatasinya

Cara pertama (Tidak disarankan)

Buka file konfigurasi database Anda (laravel_root / config / database.php) & cari blok kode di bawah ini.

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

Ubah blok kode seperti di bawah ini

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

Cara kedua (Direkomendasikan oleh Laravel)

Periksa root Laravel Anda. Ada panggilan file .env jika tidak ada, cari .env.example, salin / ubah nama menjadi .env setelah itu file tersebut terlihat pecah!

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

Ubah blok di bawah ini sebagai berikut

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

Sekarang akan berfungsi dengan baik.

absiddique hidup
sumber
1
Apa gunanya file ini? Informasi ini root/config/database.phpsepertinya berlebihan.
Halter
Dosis informasi tidak berlebihan, menggunakan fungsi env untuk membaca nilai dari file .env untuk mengamankan informasi server.
absiddiqueLive
Bagaimana Anda menemukan atau membuat nama host, nama database, nama pengguna, dan kata sandi Anda dengan Homestead?
Connor Leech
21

jika Anda menggunakan php artisan migrateBUKAN dari kotak gelandangan tetapi dari mesin host maka Anda harus mendefinisikan di dalam.env dalam ip kotak192.168.10.10

dan jelas mengatur izin untuk pengguna homestead dari ip Anda seperti

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

dalam .envfile

DB_HOST=192.168.10.10
DB_DATABASE=homestead
DB_USERNAME=homestead
wdog
sumber
Saya tidak bisa membuatnya bekerja, tetapi grant all privileges on *.* to 'homestead'@'localhost' identified by 'secret';berhasil untuk saya.
Ryan
21

Jika Anda menggunakan server web default PHP (mis. php artisan serve) Anda harus memulai ulang server Anda setelah mengubah nilai file .env Anda.

Vrushal Raut
sumber
11

Ketika Anda menginstal Homestead, ini membuat database "homestead" default di VM. Anda harus SSH ke VM homestead sshdan menjalankan migrasi Anda dari sana. Jika Anda bekerja secara lokal tanpa VM, Anda harus membuat basis data secara manual. Secara default, database harus disebut homestead, nama pengguna adalah homestead dan kata sandinya rahasia.

periksa utas ini di laracasts atau posting blog ini untuk detail lebih lanjut


jika Anda mendapatkan

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

coba ubah "host" di file /app/config/database.php dari "localhost" menjadi "127.0.0.1". Anda dapat menemukan detail lebih lanjut dan perbaikan lainnya di sini di utas ini .

Periksa juga apakah Anda telah menentukan yang benar unix_socket. periksa utas ini .

Sojan V Jose
sumber
@ rangerover.js coba ubah "host" di file /app/config/database.php dari "localhost" menjadi "127.0.0.1"
Sojan V Jose
@ rangerover.js periksa utas ini stackoverflow.com/questions/20723803/… . lihat salah satu solusi yang penting.
Sojan V Jose
@ rangerover.js juga memeriksa apakah layanan mysql berjalan :)
Sojan V Jose
@ rangerover.js dapat memeriksa unix_socket Anda? stackoverflow.com/a/25649930/939299
Sojan V Jose
1
Akhirnya berhasil pada 4 mencoba. Harap hapus semua komentar Anda, dan sertakan tautan ini stackoverflow.com/a/25649930/939299 sebagai bagian dari jawaban Anda karena itu membantu saya.
cyber8200
11

Periksa Socket UNIX MySQL

Temukan lokasi unix_socket menggunakan 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)

Lalu saya pergi ke config / database.php

Saya memperbarui baris ini: 'unix_socket' => '/tmp/mysql.sock',

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

Itu dia. Ini berfungsi untuk saya sebagai percobaan ke-4 saya. Saya harap langkah-langkah ini membantu seseorang. : D

cyber8200
sumber
Wow, itu menyelamatkan saya
:)
11

Saya memiliki masalah yang sama dan pada akhirnya ternyata saya hanya perlu me-restart server dan mulai lagi

Ctrl+ clalu

php artisan serve
kode511788465541441
sumber
9

Di Windows PC Ikuti di bawah ini.


  1. Akses folder Root aplikasi Anda.

  2. Edit file .env

Akses folder Root aplikasi Anda

Edit File .env

Edit Highlighted dan ubah UserName dan kata sandi serta kata sandi Database sesuai.

Fred Ondieki
sumber
9

dalam kasus saya, setelah memulai kembali - server saya masalahnya hilang.

keluar / tutup perintah "php artisan serve" dan

jalankan kembali perintah "php artisan serve" perintah .

sh6210
sumber
8

Suatu saat di masa depan. Coba hapus konfigurasi Anda terlebih dahulu

php artisan config:clear. 

Tutup semua terminal / cmd windows dan kemudian restart terminal / CMD dan ini akan menghilangkan pesan kesalahan. Lihat apakah itu berfungsi.

Krishneil
sumber
terima kasih banyak ini bekerja untuk saya. saya tidak tahu mengapa kesalahan ini terjadi. saya hanya menutup semua dan memuat ulang dan menjalankan php artisan config: clear
saber tabatabaee yazdi
6

setelah config db restart:

 php artisan serve

Jika servis aktif sebelum mengatur db config.

A1Gard
sumber
5

saya menggunakan laravel 5. * Saya pikir saya memiliki panggilan file .envdi root proyek yang terlihat seperti ini:

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

Dan itu sudah selesai menulis konfigurasi bd sehingga Anda dapat menghapus konfigurasi var sehingga laravel mengambil konfigurasi di bawah / config atau mengatur konfigurasi Anda di sini.

Saya melakukan yang kedua dan itu bekerja untuk saya :)

Jesus Gonzalez
sumber
5

Mengerti! Masuk sebagai root dan berikan homestead @ localhost hak untuk semuanya.

Dari terminal Anda:

$ 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

Sekarang pengguna reguler homestead memiliki akses ke semua tabel Anda, dan karenanya, harus dapat menjalankan hal-hal seperti migrasi.

Mike Wright
sumber
5

Setelah mengubah .env dengan konfigurasi baru, Anda harus menghentikan server dan menjalankannya lagi (php artisan serve). Karena laravel mendapatkan lingkungan ketika diinisialisasi server. Jika Anda tidak memulai ulang, Anda akan mengubah .env bertanya pada diri sendiri mengapa perubahan tidak terjadi !!

Luis Lopez
sumber
5

Yang harus Anda lakukan adalah mengubah file .env Anda .

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

Di depan DB_DATABASE, tulis nama database dan di depan DB_USERNAME, gunakan root .

Apoorv
sumber
4

Saya hanya ingin memposting ini karena masalah ini membuat saya frustrasi selama sekitar 3 jam hari ini. Saya belum mencoba salah satu metode yang tercantum dalam jawaban lain, meskipun semuanya tampak masuk akal. Sebenarnya, saya baru saja akan mencoba melalui masing-masing solusi yang diusulkan di atas, tetapi entah bagaimana saya mendapat inspirasi ini. Inilah yang berhasil bagi saya untuk membuat saya kembali bekerja - YMMV:

1) Temukan file .env Anda. 2) Ubah nama file .env Anda menjadi sesuatu yang lain. Laravel 5 harus menggunakan file ini sebagai pengganti untuk pengaturan di tempat lain dalam framework. Saya mengganti nama saya menjadi .env.old 3) Anda mungkin perlu me-restart server web Anda, tetapi saya tidak harus melakukannya.

Semoga berhasil!

Eric Hepperle - CodeSlayer2010
sumber
3

Anda harus menjalankan $ php artisan migrateperintah dari dalam Homestead, bukan Mac Anda.

Martin Bean
sumber
Tangkapan layar Anda menunjukkan nama mesin sebagai MBP-bheng-aveniors. Itu bukan VM Anda. Anda perlu SSH ke Homestead ( $ homestead ssh) dan kemudian lari $ php artisan migratedari dalam sesi SSH itu.
Martin Bean
3

Periksa file " .env " Anda di folder root. Apakah itu benar?

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
Ferhat KOÇER
sumber
3

saya sudah menemukan solusinya

  1. Buka direktori root aplikasi Anda dan buka file .env (Di ubuntu mungkin disembunyikan jadi tekan ctrl + h untuk menampilkan file tersembunyi) di editor Anda dan ubah pengaturan konfigurasi basis data. lalu simpan file .env Anda

  2. kemudian restart server apache / server web Anda. dan menyegarkan halaman Anda dan Anda telah selesai

  3. Jika masih masalah coba jalankan perintah di bawah ini untuk menghapus file cache konfigurasi lama.

Ini bekerja untuk saya ...

DucaBgd
sumber
3

ubah saja hal-hal ini di file .env dari folder root Anda.

DB_DATABASE=your_db_name
DB_USERNAME=your_db_user_name
DB_PASSWORD='your_db_password'

Ini berhasil untuk saya.

sradha
sumber
3

dalam kasus saya (laravel 5+) saya harus membungkus kata sandi saya dengan tanda kutip tunggal dan menghapus cache konfigurasi:

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

lalu jalankan:

php artisan config:clear
mh bitarafan
sumber
1

Masuk ke MYSQL - gunakan database mysql.

Pilih * dari Pengguna;

Pastikan kolom HOST Anda benar. Seharusnya host yang Anda hubungkan (server aplikasi Anda) baik itu alamat IP, atau nama DNS. Juga '%' akan berfungsi (artinya wildcard) tetapi tidak akan aman.

beiller
sumber
1

Periksa file .env Anda, jika Anda telah mengedit salah satu variabel, silakan restart server laravel, dan masalah Anda akan terpecahkan

Ogbonna Vitalis
sumber
1

A. Setelah memperbarui file .env dengan pengaturan basis data, hapus pengaturan larval dengan "menjalankan php artisan config: clear"

B. Pastikan Anda me-restart server apache Anda / jalankan kembali perintah "php artisan serve" agar pengaturan Anda berlaku.

Bantuan Softwarer
sumber
0

Saya memiliki masalah yang sama menggunakan SQLite. Masalah saya adalah bahwa DB_DATABASE menunjuk ke lokasi file yang salah.

Buat file sqlite dengan perintah sentuh dan output path file menggunakan 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"

Kemudian output path yang tepat ke variabel 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

Tanpa jalur yang benar Anda akan mendapatkan kesalahan akses ditolak

Connor Leech
sumber
0

Jika Anda memiliki kesalahan mengembalikan sesuatu seperti PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu'ini karena Anda mengubah konfigurasi batabase Anda sebagai DB_DATABASE=laravelu. Jadi untuk saat ini Anda juga:

  1. Ubah atauDB_DATABASE=[yourdatabase]
  2. buat database bernama laraveludi phpmyadmin Anda

ini harus bisa menyelesaikannya

Byron Wong
sumber
0

Dalam kasus saya kesalahan itu "disebabkan" oleh konfigurasi Homestead / Vagrant saya tentang yang saya lupa :) mencoba menjalankan migrasi hanya dari baris perintah.

Jika menggunakan lingkungan Homestead Vagrant Box Anda harus menjalankan migrasi Anda dari dalam mesin Homestead Anda (setelah terhubung dengan menggunakan ssh :), [email protected]:22maka hak akses akan OK dan akan memungkinkan migrasi untuk berjalan.

Picard
sumber
0

Dari pertanyaan Anda, tampaknya Anda menjalankan homestead. Dalam hal ini, pastikan Anda menjalankan perintah di VM Anda. Banyak pengembang termasuk saya sering membuat kesalahan dan menjalankan perintah tukang di luar VM yang perintahnya akan mencoba untuk terhubung ke database lokal kami yang dapat diakses melalui localhost yang berbeda dari database yang digunakan oleh homestead. Cd ke direktori Homestead Anda dan jalankan

vagrant ssh

kemudian masukkan ke dalam kode jika di situlah Anda menyimpan proyek Anda dan masuk ke proyek Anda dan jalankan php artisan migrate again Saya harap ini akan membantu orang lain.

Abdellah Ramadan
sumber