nie można zresetować hasła roota mysql

28

Muszę zresetować hasło roota mojej lokalnej instalacji mysql, ale nie pozwoli mi to. Próbowałem tego:

$ 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

Jak mogę zresetować hasło? edytuj 1 Mam to:

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

wygląda na to, że proces automatycznie uruchamia ponownie mysql, jak tylko go zabiję ...

stdcerr
źródło

Odpowiedzi:

43

Najpierw spróbuj użyć

mysql -u root -p

i wprowadź swoje hasło (jeśli pamiętasz) po wyświetleniu monitu o zalogowanie się jako użytkownik root-sql (pamiętaj, że zmiana -pdotyczy hasła).

Jeśli naprawdę musisz zresetować hasło roota do mysql, oto prosty sposób - zmień konfigurację pakietu dpkg-reconfigure.

Proste kroki, aby zresetować hasło root mySQL:

  1. Sprawdź wersję swojego mysql-server;

    apt-cache policy mysql-server
    

    i sprawdź wiersz, który pokazuje zainstalowaną wersję wśród innych informacji. np. dla mojej instalacji to:

    Installed: 5.5.37-0ubuntu0.12.04.1
    

    (Z tego wiem, że mysql-server-5.5zainstalowałem w moim systemie.)

  2. Rozpocznij rekonfigurację za pomocą:

    sudo dpkg-reconfigure mysql-server-*.*
    

    gdzie mysql-server-*.*należy zastąpić posiadaną wersją. (dla mnie byłoby mysql-server-5.5). To zatrzyma demona bazy danych. Pojawi się monit, w którym należy wprowadzić nowe hasło i potwierdzić ponowną konfigurację.

    Snap1

    Demon zostanie automatycznie uruchomiony po zakończeniu ponownej konfiguracji.

  3. Następnie możesz zalogować się za pomocą:

    mysql -u root -p
    

    i uruchom zadania administratora bazy danych.

Referencje:

  1. https://help.ubuntu.com/community/MysqlPasswordReset [Które wkrótce zostaną oczyszczone, jak wskazano na stronie.]

  2. Przewodnik po Ubuntu Server związany z konkretną wersją.

precyzyjny
źródło
2
Potwierdzam, że dpkg-reconfigure mariadb-server-10.1zadziałało w MariaDB, gdy wszystkie inne rozwiązania nie. Dziękuję Ci za to.
liviucmg
19
dpkg-reconfigurenie monitował o hasło dla mnie .. czy istnieje sposób, aby je wymusić?
Unirgy,
15
Nie działało dla mnie. Użyłem polecenia jak wyżej i otrzymałem „Sprawdzanie, czy aktualizacja jest potrzebna. Ta instalacja MySQL jest już uaktualniona do 5.7.13, użyj --force, jeśli nadal musisz uruchomić mysql_upgrade”. Użycie --force dało tę samą odpowiedź.
Anthony Scaife,
5
Najwyraźniej to już nie działa.
dpi
1
@Paulo Henrique Nie. Biorąc pod uwagę sytuację, zdecydowaliśmy, że najlepszym wykorzystaniem naszego czasu jest pełna ponowna instalacja serwera.
Anthony Scaife
21

Referencje zaczerpnięte z tego bloga:

Krok 1: Zatrzymaj usługę MySQL.

sudo service mysql stop

Krok 2: Zabij wszystkich działających mysqld.

sudo killall -9 mysqld

Krok 3: Uruchomienie mysqld w trybie awaryjnym.

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

Krok 4: Uruchom klienta MySQL

mysql -u root

Krok 5: Po udanym logowaniu wykonaj polecenie, aby zmienić dowolne hasło.

FLUSH PRIVILEGES;

Krok 6: Możesz zaktualizować hasło root mysql.

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

dla mysql> 5.7 użyj tego zamiast wyżej:

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

Krok 7: Wykonaj to polecenie.

FLUSH PRIVILEGES;

Krok 8: Wyjdź z konsoli mysql

exit

Krok 9: Zabij mysqld_safe i uruchom mysql

sudo killall mysqld_safe && sudo service mysql start
Anvesh
źródło
1
powinno być sudo service mysql stop, niesudo stop mysql
knocte
1
ponadto na koniec brakuje kroków, sudo killall mysqld_safe && sudo service mysql starta następnie spróbuj zalogować się ponownie
knocte
3
W MYSQL 5.7 zmieniono składnię zmiany hasła naALTER USER root IDENTIFIED BY 'NEW_PASSWORD_HERE'
Tarek Fadel
7
UWAGA ! W MySQL 5.7 pojawiła się nowa bestia o nazwie auth_socket. Jeśli zainstalujesz mysql bez hasła roota, bestia zaatakuje cię i stracisz 50 punktów życia. W kroku 6 powyżej musisz ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASS';. Możesz przeczytać o tym tutaj . Teoretycznie (nie próbowałem) powinieneś móc zalogować się do mysql bez hasła, jeśli "sudo su -" zostanie rootem.
olafure
3
A jeśli ALTER USER ...nie działa, użyjUPDATE mysql.user SET authentication_string = PASSWORD('NEWPASS'), plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost';
olafure
9

Pod Ubuntu 16.04 i mysql-server-5.7poprawną odpowiedzią jest ostatni komentarz olafure, dpkg-reconfigure mysql-server-5.7już nie działa.

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

Teraz w konsoli mysql >mysql

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

Uruchom ponownie dobry mysql proces

sudo killall mysqld
sudo service mysql start

Sprawdź swoje nowe hasło

mysql -u root -p
Enter password: newpass
mysql>
Pierre-Damien
źródło
5
Na mysqld_safewykonanie, pojawia się błąd: Directory '/var/run/mysqld' for UNIX socket file don't exists.. Więc pobiegłem sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqldi reszta powyższej odpowiedzi działa. Czy to błąd w Ubuntu 16? Nigdy wcześniej nie spotkałem się z tymi wszystkimi problemami podczas aktualizacji haseł.
Chester,
@ Chester dziękuję bardzo !! To był jedyny sposób, który w końcu zadziałał, ponieważ wszystkie inne rozwiązania zgłaszają błąd. (Ubuntu-Server 16.04 tutaj) Należy to dodać do odpowiedzi
derHugo
3

Począwszy od MySQL 5.7 , podczas początkowej instalacji, jeśli pozostawisz hasło puste, wtedy dla tego użytkownika uwierzytelnianie będzie oparte na auth_socketwtyczce.

Prawidłowy sposób zmiany hasła to:

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
źródło
To była moja dokładna sprawa (puste hasło podczas instalacji w mysql 5.7) i było to jedyne rozwiązanie dla mojej sprawy.
cherouvim
Dostaję wiadomość:ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
user2513149
@ user2513149 Uruchom ponownie serwer MySQL bez --skip-grant-tablesopcji i sprawdź, czy to rozwiązanie działa.
Barun
@Barun, nie, bez --skip-grant-tablesopcji nie mogę nawet zalogować się do MySQL jako root. MówiERROR 1698 (28000): Access denied for user 'root'@'localhost'
użytkownik2513149,
Rozwiązany! Musiałem zalogować się do zwykłej konsoli MySQL (nie mysqld_safe) jako root bez hasła. Mam Ubuntu 18.04 i mysql-server-5.7. Ta odpowiedź pomogła mi askubuntu.com/a/767252/585252 (patrz dolna część)
użytkownik2513149,
1

Wydawało mi się, że nic z pozostałych odpowiedzi nie działa. To jest moje rozwiązanie:

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

Tam:

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

Następnie:

sudo killall mysqld
sudo service mysql start
sudo mysql -u root -p
Wtower
źródło
1
Reszta nie działa dla mnie ani ... ani twoje rozwiązanie niestety: nadal 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.
pojawia
1
To jest jedyna rada, która działa dla mnie spośród sześciu podpowiedzi, które wypróbowałem, ale dodałem bit @Chester powyżej, aby uniknąć błędu „Plik gniazda UNIX nie istnieje”: sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqlddotyczy mysql 5.7 i ubuntu 18.04 .
twowheeler
0

Utwórz plik z tym:

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

Zatrzymaj serwer mysql i uruchom to:

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

Sprawdź tutaj po więcej szczegółów: http://dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html

Elier
źródło