MySQL'in kök şifresini sıfırlayamıyor


28

Yerel mysql kurulumumun root şifresini sıfırlamam gerekiyor ama izin vermiyor. Bunu denedim:

$ 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

Şifrenin sıfırlanmasını nasıl sağlayabilirim? düzenleme 1 Ben bunu aldım:

$ 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)

Öyle görünüyor ki, bir süreç ben öldürür öldürmez mysql otomatik olarak yeniden başlatılıyor

Yanıtlar:


43

İlk önce lütfen kullanmayı deneyin

mysql -u root -p

ve sql-root kullanıcısı olarak giriş yapmak için komut isteminde şifrenizi (hatırlıyorsanız) girin (anahtarın -pşifre için olduğunu unutmayın ).

Eğer mysql için root şifrenizi gerçekten sıfırlamanız gerekiyorsa, işte size kolay bir yol - paketi yeniden yapılandırın dpkg-reconfigure.

MySQL root şifresini sıfırlamak için kolay adımlar:

  1. Sürümünüzü kontrol edin mysql-server;

    apt-cache policy mysql-server
    

    ve yüklü bilgiyi diğer bilgilerin yanında gösteren satırı görmek için bkz. örn. benim kurulumum için:

    Installed: 5.5.37-0ubuntu0.12.04.1
    

    (Bundan mysql-server-5.5sistemime kurduğumu biliyorum .)

  2. Yapılandırmayı şu şekilde başlat:

    sudo dpkg-reconfigure mysql-server-*.*
    

    Sahip mysql-server-*.*olduğunuz sürümle değiştirilmeli. (benim için olurdu mysql-server-5.5). Bu veritabanı arka planını durduracak. Yeni şifrenizi girmeniz ve yeniden yapılandırmayı onaylamanız gereken bir bilgi istemi görünecektir.

    snap1

    Yeniden yapılandırma tamamlandıktan sonra arka plan programı otomatik olarak başlatılır.

  3. Daha sonra ile giriş yapabilirsiniz:

    mysql -u root -p
    

    ve veritabanı yönetici görevlerinizi başlatın.

Referanslar:

  1. https://help.ubuntu.com/community/MysqlPasswordReset [Yakında sayfada belirtildiği gibi temizlenir.]

  2. Özel versiyonunuzla ilgili Ubuntu Sunucu Rehberi .


2
dpkg-reconfigure mariadb-server-10.1Tüm diğer çözümler işe yaramadığında bunun MariaDB için çalıştığını onaylayabilir . Bunun için teşekkür ederim.
liviucmg

19
dpkg-reconfigurebenim için parola istemedi .. zorlamak için bir yolu var mı?
Unirgy

15
Benim için işe yaramadı. Komutu yukarıdaki gibi kullandım ve "Güncellemeye gerek duyulup duyulmadığını kontrol ediyorum. MySQL'in bu kurulumu zaten 5.7.13'e yükseltildi, hala mysql_upgrade komutunu çalıştırmanız gerekirse - force" komutunu kullandım. --Force kullanmak aynı cevabı verdi.
Anthony Scaife

5
Görünüşe göre bu artık işe yaramıyor.
dpi

1
@Paulo Henrique Hayır. Durum göz önüne alındığında, zamanımızın en iyi kullanımı tam bir sunucu yeniden yükleme olduğuna karar verdik.
Anthony Scaife,

21

Bu blogdan alınan referans:

Adım 1: MySQL Hizmetini durdurun.

sudo service mysql stop

Adım 2: Çalışan tüm mysqld'leri öldür.

sudo killall -9 mysqld

Adım 3: MySQL'in Güvenli modda başlatılması.

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

4. Adım: MySQL istemcisini başlatın.

mysql -u root

Adım 5: Başarılı bir giriş yaptıktan sonra, şifreyi değiştirmek için lütfen bu komutu uygulayın.

FLUSH PRIVILEGES;

Adım 6: MySQL root şifresini güncelleyebilirsiniz.

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

mysql> 5.7 için yukarıdaki yerine bunu kullanın:

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

Adım 7: Lütfen bu komutu yürütün.

FLUSH PRIVILEGES;

Adım 8: MySQL konsolundan çıkın

exit

9. Adım: mysqld_safe'yi kapatın ve mysql'i başlatın.

sudo killall mysqld_safe && sudo service mysql start

1
olmalı sudo service mysql stop, değilsudo stop mysql
knocte

1
Ayrıca, sonunda adımlar eksik sudo killall mysqld_safe && sudo service mysql startve tekrar giriş yapmayı deneyin
knocte

3
MYSQL 5.7 için şifre değiştirme sözdizimi değişmiştirALTER USER root IDENTIFIED BY 'NEW_PASSWORD_HERE'
Tarek Fadel

7
Not ! MySQL 5.7'de auth_socket adında yeni bir canavar var. Eğer root şifresi olmadan mysql kurarsan, canavar sana saldıracak ve 50 puan kazanacaksın. Yukarıdaki 6. adımda yapmanız gerekir ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASS';. Buradan okuyabilirsiniz . Teorik olarak (denemedim), "sudo su -" root olmanız durumunda, şifre olmadan mysql'ye giriş yapabilmelisiniz.
olafure

3
Ve ALTER USER ...işe yaramazsa, kullanUPDATE mysql.user SET authentication_string = PASSWORD('NEWPASS'), plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost';
olafure

9

Ubuntu 16.04 ve mysql-server-5.7doğru cevap, olafürün son yorumudur, dpkg-reconfigure mysql-server-5.7artık işe yaramaz .

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

Şimdi mysql konsolunda >mysql

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

İyi mysql süreci yeniden başlat

sudo killall mysqld
sudo service mysql start

Yeni şifrenizi kontrol edin

mysql -u root -p
Enter password: newpass
mysql>

5
At mysqld_safeyürütme, ben hata alıyorum: Directory '/var/run/mysqld' for UNIX socket file don't exists.. Bu yüzden koştum sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqldve yukarıdaki cevabın geri kalanı işe yarıyor. Bu Ubuntu 16'daki bir hata mı? Tüm bu sorunları daha önce şifreleri güncellerken hiç deneyimlemedim.
Chester,

@Chester çok teşekkür ederim !! Bu, diğer tüm çözümler bir hata attığında nihayet çalışmanın tek yoluydu. (Ubuntu-Server 16.04 burada) Bu cevaba eklenmeli
derHugo

3

MySQL 5.7 ile başlayarak , ilk kurulum sırasında, şifrenizi boş bırakırsanız, o zaman bu kullanıcı için, kimlik doğrulama auth_socketeklentiye dayalı olacaktır .

Şifreyi değiştirmenin doğru yolu şöyle olacaktır:

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/


Bu benim tam davamdı (mysql 5.7 kurulumunda boş şifre) ve bu davam için tek çözümdü.
cherouvim

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

@ user2513149 Lütfen MySQL sunucunuzu --skip-grant-tablesseçenek olmadan yeniden başlatın ve bu çözümün işe yaradığını görün.
Barun

@Barun, hayır, --skip-grant-tablesseçenek olmadan MySQL'e root olarak giriş bile yapamıyorum. Diyor kiERROR 1698 (28000): Access denied for user 'root'@'localhost'
user2513149 25:18

Çözüldü! Düzenli MySQL konsolunda (değil mysqld_safe) şifre olmadan root olarak giriş yapmak zorunda kaldım . Ubuntu 18.04 ve mysql-server-5.7 var. Bu cevap bana yardımcı oldu askubuntu.com/a/767252/585252 (alt kısma bakın)
user2513149

1

Cevapların geri kalanından hiçbir şey benim için işe yaramadı. Bu benim çözümüm:

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

Orada:

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

Sonra:

sudo killall mysqld
sudo service mysql start
sudo mysql -u root -p

1
Gerisi ne benim için işe yaramıyor ne de ne yazık ki sizin çözümünüz maalesef: Hala bu 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.
hatayı alıyorum

1
Bu benim için çalıştığım altı öneriden sadece benim için tavsiyede bulundu, ancak "UNIX soket dosyası mevcut değil" hatasını önlemek için @Chester'ın bitini ekledim: sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqldmysql 5.7 ve ubuntu 18.04 .
twowheeler

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.