tidak dapat mengatur ulang kata sandi root mysql

28

Saya perlu mengatur ulang kata sandi root instalasi mysql lokal saya tetapi tidak mengizinkan saya. Saya sudah mencoba ini:

$ sudo /etc/init.d/mysql stop
 * Stopping MySQL database server mysqld                                                                                                              [ OK ] 
[1]-  Exit 1                  sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking
[2]+  Exit 1                  sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking
reg@regDesktopHome:~$ sudo mysqld --skip-grant-tables &
[1] 13651
reg@regDesktopHome:~$ 140627 19:02:02 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead.

reg@regDesktopHome:~$ mysql -u root mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
reg@regDesktopHome:~$ sudo mysql -u root mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[1]+  Exit 1                  sudo mysqld --skip-grant-tables

Bagaimana saya bisa mendapatkan ulang kata sandi? sunting 1 Saya mendapat ini:

$ ps ax| grep mysql
16515 ?        Ssl    0:00 /usr/sbin/mysqld
16551 pts/23   S+     0:00 grep --color=auto mysql
reg@regDesktopHome:~/semios/v3upgrade$ sudo kill -9 16515
reg@regDesktopHome:~/semios/v3upgrade$ ps ax| grep mysql
16678 ?        Ssl    0:00 /usr/sbin/mysqld
16715 pts/23   S+     0:00 grep --color=auto mysql
reg@regDesktopHome:~/semios/v3upgrade$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

Sepertinya proses secara otomatis me-restart mysql segera setelah saya membunuhnya ...

stdcerr
sumber

Jawaban:

43

Pertama, silakan coba gunakan

mysql -u root -p

dan masukkan kata sandi Anda (jika Anda ingat) saat diminta untuk masuk sebagai pengguna sql-root (perhatikan saklar -puntuk kata sandi).

Jika Anda benar-benar harus mengatur ulang kata sandi root untuk mysql, inilah cara mudah - mengkonfigurasi ulang paket dengan dpkg-reconfigure.

Langkah mudah untuk mereset kata sandi root mySQL:

  1. Periksa versi Anda mysql-server;

    apt-cache policy mysql-server
    

    dan lihat baris yang menunjukkan versi terinstal di antara informasi lainnya. misalnya untuk instal saya:

    Installed: 5.5.37-0ubuntu0.12.04.1
    

    (Dari sini saya tahu bahwa saya telah mysql-server-5.5menginstal di sistem saya.)

  2. Mulai konfigurasi ulang dengan:

    sudo dpkg-reconfigure mysql-server-*.*
    

    di mana mysql-server-*.*harus diganti oleh versi yang Anda miliki. (bagi saya itu akan mysql-server-5.5). Ini akan menghentikan daemon basis data. Sebuah prompt akan muncul di mana Anda harus memasukkan kata sandi baru Anda dan mengkonfirmasi konfigurasi ulang.

    snap1

    Daemon akan dimulai secara otomatis setelah konfigurasi ulang selesai.

  3. Anda kemudian dapat masuk dengan:

    mysql -u root -p
    

    dan mulai tugas-tugas admin database Anda.

Referensi:

  1. https://help.ubuntu.com/community/MysqlPasswordReset [Yang akan segera dibersihkan seperti yang ditunjukkan pada halaman.]

  2. Panduan Server Ubuntu terkait dengan versi spesifik Anda.

tepat
sumber
2
Dapat mengkonfirmasi bahwa dpkg-reconfigure mariadb-server-10.1berfungsi untuk MariaDB ketika semua solusi lain tidak. Terima kasih untuk ini.
liviucmg
19
dpkg-reconfiguretidak meminta kata sandi untuk saya .. apakah ada cara untuk memaksanya?
Unirgy
15
Tidak bekerja untuk saya. Saya menggunakan perintah seperti di atas, dan mendapat "Memeriksa apakah pembaruan diperlukan. Instalasi MySQL ini sudah ditingkatkan ke 5.7.13, gunakan --force jika Anda masih perlu menjalankan mysql_upgrade". Menggunakan --force memberikan respons yang sama.
Anthony Scaife
5
Ternyata ini tidak berfungsi lagi.
dpi
1
@ Paulo Henrique No. Mengingat situasi ini, kami memutuskan bahwa penggunaan waktu terbaik kami adalah menginstal ulang server secara penuh.
Anthony Scaife
21

Referensi diambil dari blog ini:

Langkah 1: Hentikan Layanan MySQL.

sudo service mysql stop

Langkah 2: Bunuh semua yang menjalankan mysqld.

sudo killall -9 mysqld

Langkah 3: Memulai mysqld dalam Safe mode.

sudo mysqld_safe --skip-grant-tables --skip-networking &

Langkah 4: Mulai klien mysql

mysql -u root

Langkah 5: Setelah berhasil masuk, jalankan perintah ini untuk mengubah kata sandi apa pun.

FLUSH PRIVILEGES;

Langkah 6: Anda dapat memperbarui kata sandi root mysql.

UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';

untuk mysql> 5.7 gunakan ini daripada di atas:

UPDATE mysql.user SET authentication_string=PASSWORD('newpwd') WHERE User='root';

Langkah 7: Silakan jalankan perintah ini.

FLUSH PRIVILEGES;

Langkah 8: Keluar dari konsol mysql

exit

Langkah 9: Bunuh mysqld_safe dan mulai mysql

sudo killall mysqld_safe && sudo service mysql start
Landasan
sumber
1
seharusnya sudo service mysql stop, tidaksudo stop mysql
knocte
1
juga, pada akhirnya langkah-langkahnya hilang sudo killall mysqld_safe && sudo service mysql startdan kemudian mencoba masuk lagi
knocte
3
Untuk MYSQL 5.7 sintaks perubahan kata sandi telah berubah menjadiALTER USER root IDENTIFIED BY 'NEW_PASSWORD_HERE'
Tarek Fadel
7
CATATAN ! Ada binatang buas baru di MySQL 5.7 yang disebut auth_socket. Jika Anda menginstal mysql tanpa kata sandi root, binatang itu akan menyerang Anda dan Anda akan kehilangan 50 hitpoint. Pada langkah 6 di atas Anda harus melakukannya ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASS';. Anda dapat membacanya di sini . Secara teoritis (saya tidak mencoba), Anda harus dapat masuk ke mysql tanpa kata sandi jika Anda "sudo su -" menjadi root.
olafure
3
Dan kalau ALTER USER ...- kalau tidak berfungsi, gunakanUPDATE mysql.user SET authentication_string = PASSWORD('NEWPASS'), plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost';
olafure
9

Di bawah Ubuntu 16.04 dan mysql-server-5.7, jawaban yang benar adalah komentar terakhir dari olafure, dpkg-reconfigure mysql-server-5.7tidak lagi berfungsi.

sudo service mysql stop
sudo killall mysqld
sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root

Sekarang di konsol mysql >mysql

USE mysql;
UPDATE user SET authentication_string=PASSWORD('newpass') WHERE user='root';
FLUSH PRIVILEGES;
\q

Mulai kembali yang baik mysql proses yang

sudo killall mysqld
sudo service mysql start

Periksa kata sandi baru Anda

mysql -u root -p
Enter password: newpass
mysql>
Pierre-Damien
sumber
5
Pada mysqld_safeeksekusi, saya mendapatkan error: Directory '/var/run/mysqld' for UNIX socket file don't exists.. Jadi saya berlari sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqlddan sisa jawaban di atas berhasil. Apakah ini bug di Ubuntu 16? Saya tidak pernah mengalami semua masalah ini memperbarui kata sandi sebelumnya.
Chester
@ Chester terima kasih banyak !! Ini adalah satu-satunya cara yang akhirnya berhasil sekarang karena semua solusi lain membuat kesalahan. (Ubuntu-Server 16.04 di sini) Ini harus ditambahkan ke jawabannya
derHugo
3

Dimulai dengan MySQL 5.7 , saat instalasi awal, jika Anda membiarkan kata sandi kosong, maka untuk pengguna itu, otentikasi akan didasarkan pada auth_socketplugin.

Cara yang benar untuk mengubah kata sandi adalah:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';

https://www.percona.com/blog/2016/03/16/change-user-password-in-mysql-5-7-with-plugin-auth_socket/

Barun
sumber
Ini adalah kasus persis saya (kata sandi kosong saat instalasi di mysql 5.7) dan ini adalah satu-satunya solusi untuk kasus saya.
cherouvim
Saya mendapatkan pesan:ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
user2513149
@ user2513149 Silakan restart server MySQL Anda tanpa --skip-grant-tablesopsi dan lihat solusi ini berfungsi.
Barun
@Barun, tidak, tanpa --skip-grant-tablesopsi saya bahkan tidak bisa login ke MySQL sebagai root. DikatakanERROR 1698 (28000): Access denied for user 'root'@'localhost'
user2513149
Terpecahkan! Saya harus masuk ke konsol MySQL biasa (bukan mysqld_safe) sebagai root tanpa kata sandi. Saya memiliki Ubuntu 18.04 dan mysql-server-5.7. Jawaban ini membantu saya askubuntu.com/a/767252/585252 (lihat bagian bawah)
user2513149
1

Tidak ada dari sisa jawaban yang tampaknya bekerja untuk saya. Ini solusi saya:

sudo service mysql stop
sudo mysqld_safe &
sudo mysql -u root

Di sana:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
FLUSH PRIVILEGES;
QUIT;

Kemudian:

sudo killall mysqld
sudo service mysql start
sudo mysql -u root -p
Wtower
sumber
1
Sisanya tidak bekerja untuk saya juga ... atau solusi Anda sayangnya: Masih mendapatkan Kesalahan ini 2017-05-30T06:33:22.291126Z mysqld_safe Logging to syslog. 2017-05-30T06:33:22.294375Z mysqld_safe Logging to '/var/log/mysql/error.log'. 2017-05-30T06:33:22.296874Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
derHugo
1
Ini adalah satu-satunya saran yang berfungsi untuk saya dari enam atau lebih saran yang saya coba, tetapi saya menambahkan bit @Chester di atas untuk menghindari kesalahan "file soket UNIX tidak ada": sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqldIni ada di mysql 5.7 dan ubuntu 18.04 .
twowheeler
0

Buat file dengan ini:

UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
FLUSH PRIVILEGES;

Hentikan server mysql dan jalankan ini:

mysqld_safe --init-file=/home/me/mysql-init &

Periksa di sini untuk perincian lebih lanjut: http://dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html

Elier
sumber