Solusi Lupa Password MySQL/MariaDB

Jika Anda belum pernah mengatur, lupa, atau perlu mengubah password MySQL, artikel ini akan memandu langkah demi langkah, sehingga tetap akan dapat mengakses database.

Kemungkinannya adalah Anda menjalankan MySQL di suatu tempat di data center. Jika itu masalahnya, mungkin suatu saat perlu mengatur atau mengubah password root. Ini dapat terjadi ketika lupa password atau ketika ingin meningkatkan level keamanan (mengingat Anda mengatur password awal MySQL ke sesuatu yang terlalu sederhana).

Proses ini ditangani sepenuhnya melalui command line dan berfungsi pada instalasi MySQL atau MariaDB. Distribusi Linux yang digunakan tidak menjadi masalah (selama memiliki akses admin, baik melalui su atau sudo).
 

Mengatur Password untuk Pertama Kalinya

Di sepanjang artikel ini, akan digunakan istilah MySQL, dengan asumsi bahwa semuanya akan berfungsi untuk MySQL dan MariaDB.

Biasanya, selama instalasi MySQL dan MariaDB, akan diminta untuk menetapkan password awal. Jika karena alasan apa pun itu tidak terjadi, Anda perlu mengatur password untuk pertama kalinya. Untuk melakukannya, buka jendela terminal dan jalankan perintah berikut:

mysqladmin -u root password NEW_PASSWORD

 
Dimana NEW_PASSWORD adalah password yang akan digunakan. Sekarang, ketika masuk ke MySQL, dengan perintah mysql -u root -p, akan diminta untuk memasukkan password yang baru dikonfigurasi.

Metode alternatif untuk mengatur password root untuk pertama kalinya, yang juga menambahkan keamanan ke database MySQL, adalah dengan menggunakan perintah mysql_secure_connection. Perintah ini tidak hanya akan mengatur password root, tetapi juga akan memungkinkan untuk menghapus pengguna anonim, melarang login root secara remote, dan menghapus database pengujian. Untuk menggunakan perintah ini, cukup ketik:

mysql_secure_connection

 
Nanti akan muncul beberapa pertanyaan dan password akan diset (serta database menjadi sedikit lebih aman).

Mengganti Password dengan init-file

Opsi init-file digunakan untuk menjalankan MySQL server dengan parameter sebuah file yang dapat dimanfaatkan untuk mereset password root MySQL.

Untuk mereset password MySQL terlebih dahulu buatlah file teks baru dengan isi sebagai berikut:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'NEW_PASSWORD'

Dimana NEW_PASSWORD adalah password baru yang akan digunakan. Simpan file itu sebagai ~/mysql-pwd.

Selanjutnya, hentikan daemon MySQL dengan perintah:

systemctl stop mysql

 
Setelah daemon berhenti, jalankan perintah:

mysqld -init-file=~/mysql-pwd

 
Setelah command prompt muncul kembali, restart daemon MySQL dengan perintah:

systemctl start mysql

 
Sekarang seharusnya sudah dapat masuk ke command prompt MySQL dengan password root baru seperti:

mysql -u root -p

 
Saat diminta, ketik password root yang baru dibuat.

Reset Password dengan skip-grant-tables

Cara ini akan mengabaikan hak akses seluruh user yang ada di MySQL, jadi semuanya akan memiliki hak akses tertinggi (root). Karena itu sebaiknya seluruh program yang membutuhkan akses ke database (PHP, Apache, Nginx, dan lainnya) ikut dimatikan.

MySQL menyimpan hak akses dan password user di dalam database mysql. Database ini menyimpan setingan MySQL, termasuk data tentang user, password dan hak aksesnya di dalam tabel mysql. Karena tabel mysql ini menyimpan tentang user dan hak aksesnya, maka disebut juga dengan Grant Table.

Cara yang akan dilakukan adalah menjalankan MySQL server tanpa menggunakan database mysql, yang berarti MySQL Server tidak dapat memeriksa setiap user, dan setiap user yang login akan memiliki akses root.

Identifikasi Versi Server

Tergantung pada versi server MySQL atau MariaDB yang berjalan di sistem, diperlukan perintah yang berbeda untuk memulihkan password root.

Untuk mengetahui versi server jalankan perintah berikut:

mysql --version

 
Jika yang terpasang adalah MySQL, hasilnya akan terlihat seperti ini:

mysql  Ver 14.14 Distrib 5.7.22, for Linux (x86_64) using EditLine wrapper

 
Atau keluaran seperti ini untuk MariaDB:

mysql  Ver 15.1 Distrib 10.3.36-MariaDB, for Linux (x86_64) using readline 5.1

 
Pastikan untuk mencatat versi MySQL atau MariaDB yang terpasang.

Ikuti langkah berikut untuk mereset password root MySQL/MariaDB:

Hentikan layanan MySQL

Untuk mengubah password root, terlebih dahulu harus menghentikan server MySQL. Untuk melakukannya ketik perintah berikut:

systemctl stop mysql

 

Mulai server MySQL tanpa grant tabel

Jalankan server database tanpa memuat grant tabel:

mysqld_safe --skip-grant-tables &

 
Tanda ampersand & di akhir perintah di atas akan menyebabkan program berjalan di latar belakang, sehingga dapat terus menggunakan shell.

Ketika opsi –skip-grant-tables digunakan, siapa pun dapat terhubung ke server database tanpa password dan dengan semua hak istimewa yang diberikan.

Masuk ke shell MySQL

Sekarang Anda dapat terhubung ke server database sebagai pengguna root:

mysql -u root

 

Membuat password root baru

  • Jalankan perintah berikut jika menggunakankan MySQL 5.7.6 dan yang lebih baru atau MariaDB 10.1.20 dan yang lebih baru:
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NEW_PASSWORD';
    FLUSH PRIVILEGES;

     
    Jika pernyataan ALTER USER tidak berfungsi, cobalah ubah tabel user secara langsung:

    UPDATE mysql.user SET authentication_string = PASSWORD('NEW_PASSWORD')
    (con)WHERE User = 'root' AND Host = 'localhost';
    FLUSH PRIVILEGES;

     

  • Jalankan perintah berikut jika memiliki MySQL 5.7.5 dan yang lebih lama atau MariaDB 10.1.20 dan yang lebih lama
    USET PASSWORD FOR 'root'@'localhost' = PASSWORD('MY_NEW_PASSWORD');
    FLUSH PRIVILEGES;

Dalam kedua kasus jika semuanya berjalan dengan baik, akan terlihat output berikut:

Query OK, 0 rows affected (0.00 sec)

 

Hentikan dan Mulai Server Database secara Normal

Sekarang setelah password root ditetapkan, hentikan server database dan mulai secara normal:

mysqladmin -u root -p shutdown

 

Anda akan diminta untuk memasukkan password root yang baru.

Mulai server database secara normal:

  • Untuk MySQL, ketik:
    systemctl start mysql
  • Untuk MariaDB, ketik:
    systemctl start mariadb

Verifikasi Password

Untuk memverifikasi bahwa password root baru telah diterapkan dengan benar, ketik:

mysql -u root -p

 
Akan diminta untuk memasukkan password root yang baru.

Pastikan password root baru Anda kuat dan simpan di tempat yang aman.