DatabaseLaravelMySQLDatabase.env6 mnt baca
Mengatasi SQLSTATE Connection Refused di Laravel
Laravel tidak bisa terhubung ke database: SQLSTATE[HY000] [2002] Connection refused. Checklist dari yang paling umum.
1 · Gejala & Log Pesan Error
error.log
SQLSTATE[HY000] [2002] Connection refused (SQL: select * from users) / Connection to tcp://127.0.0.1:3306 failed // saat migrate: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for mysql failed: Name or service not known
2 · Akar Penyebab Masalah
Aplikasi Tidak Sampai ke Server Database
"Connection refused" artinya paket TCP sampai ke alamat tujuan tapi tidak ada yang mendengarkan di port itu. Bukan salah query, bukan salah migration: koneksinya sendiri gagal.
Tersangka berurutan:
- Server database tidak jalan: MySQL/MariaDB belum di-start (sangat umum setelah restart laptop).
- Host/port salah di .env:
DB_HOST=127.0.0.1tapi database jalan di tempat lain, atau port bukan 3306. - Nama host khusus environment: di Laravel Sail/Docker, host-nya
mysql(nama service), bukan127.0.0.1. Di sisi lain, dari luar container pakai127.0.0.1. Tertukar = refused. - Config ter-cache:
.envsudah benar tapi Laravel masih memakai config lama hasilconfig:cache.
3 · Solusi & Diff Kode
✕ Sebelum (bermasalah)
before
# ❌ .env tidak cocok dengan environment
DB_CONNECTION=mysql
DB_HOST=127.0.0.1 # tapi app jalan di dalam Sail → harusnya "mysql"
DB_PORT=3306
DB_DATABASE=belajar
DB_USERNAME=root
DB_PASSWORD= # password kosong padahal MySQL minta password✓ Sesudah (diperbaiki)
after
# ✔ sesuaikan dengan tempat app berjalan
# Di dalam Sail/Docker:
DB_HOST=mysql
DB_PASSWORD=password # samakan dengan docker-compose.yml
# Setelah ubah .env, selalu:
# php artisan config:clearLangkah Perbaikan
- Pastikan database jalan:
sudo systemctl status mysql(Linux) atau cek di XAMPP/Laragon. Kalau mati, start dulu. - Samakan .env dengan realita: host, port, nama database (database-nya harus sudah dibuat!), username, password.
- Ingat aturan Sail/Docker: dari dalam container pakai nama service (
mysql); dari luar (artisan di host) pakai127.0.0.1. - Clear config cache:
php artisan config:clearsetiap habis ubah .env. Laluphp artisan config:cachelagi untuk production. - Tes koneksi mentah:
mysql -h 127.0.0.1 -u root -p. Kalau ini saja gagal, masalahnya di server database, bukan di Laravel.