Bagaimana cara mereset atau memulihkan kata sandi akun admin untuk MySQL?

14

Saya memiliki database MySQL yang saya "warisi" dan saya tidak diberikan kredensial admin. Namun saya memiliki akses ke kotak yang menjalankannya. Apakah ada cara untuk memulihkan kredensial admin atau membuat yang baru?

Slolife
sumber

Jawaban:

15

Baca dan laksanakan bab tentang mengatur ulang kata sandi root di Manual Referensi MySQL.

Prosedur ini memulai daemon mysql tanpa izin yang memungkinkan Anda untuk terhubung tanpa memberikan kredensial. Dalam mode ini Anda dapat terhubung secara normal, dan mengatur ulang kata sandi dan hibah. Setelah itu jangan lupa untuk memulai mysql lagi dengan otorisasi yang tepat.

David Schmitt
sumber
6

Jika ini adalah kotak Debian / Ubuntu, ada akun setara root khusus yang disebut debian-sys-Maint . Anda dapat membaca kata sandi di /etc/mysql/debian.cnf

Dengan menggunakan kata sandi itu, Anda dapat masuk ke mysql sebagai debian-sys-Maint menggunakan:

mysql --defaults-file=/etc/mysql/debian.cnf mysql

Setelah Anda masuk, lakukan hal berikut:

update user set password=password('<new password>') where user='root';
flush privileges;
quit;

root sekarang dapat diakses menggunakan kata sandi baru Anda:

mysql -uroot -p
Brent
sumber
3

Pengguna root saya tidak ada. Di

CREATE USER root@localhost;

saya mendapatkan

ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

Solusinya adalah

mysqld_safe  --skip-grant-tables &
mysql
INSERT INTO user (Host,User,Password) VALUES ('localhost', 'root', 'changethispassword');
UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;

Setelah itu saya menambahkan semua privs satu per satu dengan sedikit bantuan dari ini:

mysql mysql -e "SELECT * FROM user WHERE User='root'\G"|grep N

(dan yang ini bisa dan harus lebih otomatis)

Catatan: menemukan jumlah Y yang benar di dalam INSERTadalah PITA.

kqw
sumber
0

Karena langkah-langkah pada Manual Referensi MySQL tidak begitu jelas, saya mencoba menjawab di sini dalam bahasa yang lebih mudah. (jawaban ini relevan untuk pengguna MacBook OSX):

  1. Karena kita tidak tahu kata sandi saat ini, server MySQL perlu menjalankan skipping / melewati kredensial login saat ini. Instruksikan server MySQL untuk melewati akses tabel hibah dengan:
    • Hentikan server MySQL Anda (jika sudah berjalan).
    • Temukan file konfigurasi MySQL Anda my.cnf,. (Bagi saya itu ditempatkan @ /Applications/XAMPP/xamppfiles/etc. Anda hanya dapat mencari jika Anda tidak dapat menemukannya).
    • Buka my.cnffile dalam editor teks apa pun.
    • Tambahkan "skip-grant-tables"(tanpa tanda kutip) di akhir [mysqld]bagian dan simpan file.
    • Sekarang mulai server MySQL Anda. Ini akan mulai dengan skip-grant-tablesopsi.
  2. Terbuka Terminaldan menjalankan mysqlperintah
  3. Jalankan perintah mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
  4. Jalankan perintah mysql> FLUSH PRIVILEGES;
  5. Jalankan perintah mysql> exit
  6. Mulai ulang server MySQL.
Saurabh Hooda
sumber