Cara mengatasi error #1045 phpMyAdmin “Access denied for user root@localhost”
“mysqli::real_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: NO)”. Artinya MySQL menerima login dari phpMyAdmin tapi menolaknya: user, password atau server di konfigurasi phpMyAdmin tidak cocok dengan database. Biasanya ini terjadi setelah password root diganti, setelah MySQL lain ikut terpasang dan mengambil port 3306, atau setelah upgrade mengubah cara MySQL memeriksa password. Bagian akhir pesan error menunjukkan penyebabnya.
- Platform
- Windows 10/11 dengan XAMPP di C:\xampp (langkah pengecekannya berlaku untuk phpMyAdmin mana pun)
- Waktu
- Sekitar 10 menit
- Yang Anda perlukan
- Akses tulis ke config.inc.php milik phpMyAdmin (di XAMPP: C:\xampp\phpMyAdmin\config.inc.php)
- Command Prompt, untuk mengetes login dan mereset password
Path XAMPP mengikuti instalasi default di C:\xampp. Detail EnvKit diperiksa pada versi 0.33.0-beta.56 (2026-10-29). EnvKit tersedia dalam Bahasa Indonesia; nama menu ditulis seperti di antarmuka Indonesia, dengan nama bahasa Inggrisnya di dalam kurung.
Langkah 1: Lihat bagian akhir pesan error
using password: NOberarti phpMyAdmin tidak mengirim password, padahal root punya password.using password: YESberarti phpMyAdmin mengirim password dan MySQL menolaknya: password-nya salah, atau phpMyAdmin tersambung ke server yang berbeda dari yang Anda kira.Kalau kodenya #2002 atau #2054, bukan #1045, penyebabnya lain; keduanya dibahas di bagian kendala di bawah.
Langkah 2: Tes login di luar phpMyAdmin
Pakai client MySQL bawaan server. Saat diminta password, tekan Enter untuk mencoba password kosong, atau ketik password yang Anda ingat. Kalau berhasil, phpMyAdmin cukup diberi password itu di konfigurasinya. Kalau tidak ada yang berhasil, reset password-nya (langkah 5).
Command Prompt C:\xampp\mysql\bin\mysql.exe -u root -p -h 127.0.0.1 -P 3306Langkah 3: Cek config.inc.php
phpMyAdmin di XAMPP login otomatis memakai user dan password yang tertulis di
config.inc.php. Kalauauth_typebernilaiconfig, isipasswordharus sama dengan password root yang sebenarnya. Gantiauth_typekecookiekalau Anda lebih suka form login dan mengetik password setiap membuka phpMyAdmin; mode cookie juga butuhblowfish_secretsepanjang 32 karakter.Simpan file lalu muat ulang halaman phpMyAdmin. Tidak ada yang perlu di-restart.
C:\xampp\phpMyAdmin\config.inc.php $cfg['Servers'][$i]['auth_type'] = 'config'; // atau 'cookie' untuk form login $cfg['Servers'][$i]['user'] = 'root'; $cfg['Servers'][$i]['password'] = 'password-root-anda'; $cfg['Servers'][$i]['host'] = '127.0.0.1'; $cfg['Servers'][$i]['port'] = '3306'; $cfg['Servers'][$i]['AllowNoPassword'] = true;Langkah 4: Pastikan phpMyAdmin tersambung ke server yang benar
Kalau ada MySQL lain yang terpasang (layanan
MySQL80dari MySQL Installer, WampServer, Laragon), bisa jadi dialah yang memakai port 3306, lengkap dengan password root-nya sendiri. Cari PID di port itu lalu cek namanya. Kalau bukanmysqld.exemilik XAMPP, hentikan layanan itu di services.msc, atau pindahkan MySQL XAMPP ke port lain dimy.inidan isiportyang sama diconfig.inc.php.Command Prompt netstat -ano | findstr LISTENING | findstr :3306 tasklist /FI "PID eq 1234"Langkah 5: Reset password root yang terlupa
Hentikan MySQL di Control Panel. Jalankan MySQL secara manual tanpa tabel hak akses, sehingga root bisa masuk tanpa password, lalu pasang password baru dari jendela kedua. Selama mode ini aktif, siapa pun di komputer ini bisa masuk, jadi selesaikan sekaligus.
Command Prompt REM Jendela 1: jalankan MySQL tanpa tabel hak akses C:\xampp\mysql\bin\mysqld.exe --defaults-file=C:\xampp\mysql\bin\my.ini --skip-grant-tables REM Jendela 2: pasang password baru, lalu matikan server C:\xampp\mysql\bin\mysql.exe -u root FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'password-baru'; exit C:\xampp\mysql\bin\mysqladmin.exe -u root -p shutdownLangkah 6: MySQL 8 dan plugin autentikasi
MySQL 8 membuat user dengan
caching_sha2_password. PHP atau phpMyAdmin yang terlalu lama untuk plugin itu gagal dengan #2054 “The server requested authentication method unknown to the client”. Perbarui PHP dan phpMyAdmin dulu. Di MySQL 8.0, root bisa dikembalikan ke plugin lama sebagai solusi sementara, tapi MySQL 8.4 mematikanmysql_native_passwordsecara default dan MySQL 9 menghapusnya. MariaDB, yang dipakai XAMPP, memakaimysql_native_passwordsecara default.MySQL 8.0 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password-anda';Langkah 7: Atau pakai MySQL dan phpMyAdmin dari EnvKit
EnvKit adalah aplikasi gratis yang memasang MySQL atau MariaDB, phpMyAdmin dan bagian lain dari stack PHP. Hentikan dulu MySQL di XAMPP supaya keduanya tidak berebut port 3306.
Atau instal dari terminalirm https://envkit.net/install.ps1?c=id-guide | iexLangkah 8: Cara phpMyAdmin di EnvKit login
EnvKit menulis
config.inc.phpuntuk phpMyAdmin sendiri: loginconfigsebagairootdengan password kosong ke 127.0.0.1 di port MySQL milik EnvKit, jadi phpMyAdmin langsung terbuka tanpa form login. Buka dari halaman Database (Databases) lewat tombol Buka phpMyAdmin (Open phpMyAdmin).Kalau Anda memberi password pada root, isi password itu di Layanan → phpMyAdmin → Pengaturan (Services → phpMyAdmin → Settings) pada kolom MySQL password (config auth), atau ubah Auth type ke cookie supaya form login muncul lagi. Port database yang Anda ganti di EnvKit ikut tertulis di konfigurasi phpMyAdmin.
Jika ada yang tidak berjalan
- #2002 “No connection could be made because the target machine actively refused it”
- Tidak ada server yang mendengarkan di host dan port yang dipakai phpMyAdmin. Jalankan MySQL, lalu pastikan
portdiconfig.inc.phpsama dengan barisport=dimy.ini. - “Connection for controluser as defined in your configuration failed”
- Ini soal user kontrol
pmayang dipakai phpMyAdmin untuk fitur tambahannya, terpisah dari login root Anda. Perbaikicontroluserdancontrolpassdiconfig.inc.php, atau jadikan kedua baris itu komentar supaya phpMyAdmin jalan tanpa fitur tersebut. - Root bisa login di terminal, tapi tidak di phpMyAdmin
- Bagi MySQL,
root@localhostdan[email protected]adalah dua akun terpisah yang bisa punya password berbeda. Bandingkanhostdiconfig.inc.phpdengan alamat yang Anda pakai di terminal, lalu samakan password kedua akun itu.