Jak zresetować lub odzyskać hasło do konta administratora dla MySQL?

14

Mam bazę danych MySQL, którą „odziedziczyłem” i nie otrzymałem poświadczeń administratora. Mam jednak dostęp do skrzynki, na której działa. Czy istnieje sposób na odzyskanie poświadczeń administratora lub utworzenie nowych?

slolife
źródło

Odpowiedzi:

15

Przeczytaj i wykonaj rozdział dotyczący resetowania hasła roota w Podręczniku MySQL.

Ta procedura uruchamia demona mysql bez autoryzacji, umożliwiając połączenie bez podawania poświadczeń. W tym trybie możesz normalnie łączyć się i resetować hasła i granty. Następnie nie zapomnij ponownie uruchomić mysql z odpowiednią autoryzacją.

David Schmitt
źródło
6

Jeśli jest to pudełko Debian / Ubuntu, istnieje specjalne konto ekwiwalentne root o nazwie debian-sys-maint . Możesz przeczytać hasło w /etc/mysql/debian.cnf

Za pomocą tego hasła możesz zalogować się do mysql jako debian-sys-maint, używając:

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

Po zalogowaniu wykonaj następujące czynności:

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

root powinien być teraz dostępny przy użyciu nowego hasła:

mysql -uroot -p
Brent
źródło
3

Mój użytkownik root nie istniał. Na

CREATE USER root@localhost;

mam

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

Rozwiązaniem było

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;

Następnie dodałem kolejno wszystkich szeregowców z niewielką pomocą:

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

(a ten może i powinien być bardziej zautomatyzowany)

Uwaga: znalezienie prawidłowej liczby „Y” w INSERTjest PITA.

kqw
źródło
0

Ponieważ kroki w Podręczniku MySQL nie są bardzo jasne, próbuję odpowiedzieć tutaj w prostszym języku. (ta odpowiedź dotyczy użytkowników MacBooka OSX):

  1. Ponieważ nie znamy aktualnego hasła, serwer MySQL musi uruchomić pomijanie / omijanie aktualnych danych logowania. Poinstruuj serwer MySQL, aby pomijał tabelę przyznania dostępu przez:
    • Zatrzymaj serwer MySQL (jeśli już działa).
    • Znajdź swój plik konfiguracyjny MySQL my.cnf. (Dla mnie został umieszczony @ /Applications/XAMPP/xamppfiles/etc. Możesz po prostu wyszukać, jeśli nie możesz go znaleźć).
    • Otwórz my.cnfplik w dowolnym edytorze tekstu.
    • Dodaj "skip-grant-tables"(bez cudzysłowów) na końcu [mysqld]sekcji i zapisz plik.
    • Teraz uruchom serwer MySQL. Zacznie się od skip-grant-tablesopcji.
  2. Otwórz Terminali uruchom mysqlpolecenie
  3. Wykonaj polecenie mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
  4. Wykonaj polecenie mysql> FLUSH PRIVILEGES;
  5. Wykonaj polecenie mysql> exit
  6. Uruchom ponownie serwer MySQL.
Saurabh Hooda
źródło