Saya baru saja memasang OS Linux Manjaro, dan berusaha melakukan konfigurasi dalam membangun environment lokal untuk pengembangan projek laravel. Web server yang saya gunakan nginx, dengan layanan database Mariadb serta package php telah selesai terinstal dan terintegrasi dengan baik. namun ketika menjalankan projek laravel yang baru saya buat, saya mendapati error yang lumayan membingungkan: ERROR 1698 (28000): Access denied for user 'root'@'localhost'. Setelah melakukan pencarian solusi dibeberapa forum dan banyak kasus, saya menemukan satu solusi dari seorang anggota forum yang dapat menyelesaikan error ini, berikut solusinya.
Di beberapa sistem, seperti Ubuntu, MySQL secara default menggunakan plugin auth_socket untuk otentikasi.
Artinya, pengguna basis data yang menggunakannya akan "diotentikasi" oleh kredensial pengguna sistem. Anda dapat melihat apakah pengguna root diatur seperti ini dengan melakukan langkah-langkah berikut:
```bash
sudo mysql -u root # Saya harus menggunakan "sudo" karena ini instalasi baru
mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;
```
Sebagaimana terlihat dalam query, pengguna root menggunakan plugin auth_socket.
Ada dua cara untuk memecahkan masalah ini:
1. Anda dapat mengatur pengguna root untuk menggunakan plugin mysql_native_password.
2. Anda dapat membuat pengguna basis data baru dengan kredensial pengguna sistem Anda (direkomendasikan).
Opsi 1:
```bash
sudo mysql -u root # Saya harus menggunakan "sudo" karena ini instalasi baru
mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
```
```bash
sudo service mysql restart
```
Opsi 2: (ganti YOUR_SYSTEM_USER dengan nama pengguna Anda)
```bash
sudo mysql -u root # Saya harus menggunakan "sudo" karena ini instalasi baru
mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY 'YOUR_PASSWD';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
mysql> UPDATE user SET plugin='auth_socket' WHERE User='YOUR_SYSTEM_USER';
mysql> FLUSH PRIVILEGES;
mysql> exit;
``
```bash
sudo service mysql restart
Ingatlah bahwa jika Anda menggunakan opsi #2, Anda harus terhubung ke MySQL sebagai nama pengguna sistem Anda (`mysql -u YOUR_SYSTEM_USER`).
Catatan: Pada beberapa sistem (misalnya, Debian 9 (Stretch)), plugin 'auth_socket' disebut 'unix_socket', sehingga perintah SQL yang sesuai harus: `UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';`.
sumber: https://stackoverflow.com/questions/39281594/error-1698-28000-access-denied-for-user-rootlocalhost