Odzyskanie hasła root’a dla bazy MySQL
Bardzo często zdarza się sytuacja, w której nie jest możliwe zalogowanie się na konto roota dla bazy danych MySQL. Tym bardziej jest to problematyczne kiedy nawet podając prawidłowe dane logowania otrzymujemy komunikat:
ERROR 1045 (28000): Access denied for user ‚root’@’localhost’ (using password: YES)
Również podobny komunikat możemy uzyskać próbując się zalogować poprzez panel phpmyadmin:
Co w takie sytuacji zrobić?
Okazuje się, że rozwiązanie tego problemu nie jest specjalnie skomplikowane. Wystarczy wykonać następujące czynności i ponownie będziemy mogli logować się za pomocą konta roota. Inną kwestią pozostaje bezpieczeństwo i pojawia się pytanie czy warto logować się za pomocą konta roota? Nie mniej jednak w tym przypadku skupiamy się tylko i wyłącznie na kwestiach związanych z odzyskaniem hasła.
W pierwszej kolejności należy zatrzymać działanie bazy MySQL, wydając polecenie (oczywiście wykonujemy to z poziomu konsoli serwera i na koncie root’a):
# /etc/init.d/mysql stop
Następnie warto sprawdzić za pomocą polecenia:
# /etc/init.d/ps aux | grep mysql
czy nie „wiszą” jakieś procesy mysql. Jeśli tak należy je pozamykać stosując np. polecnie kill.
Następnie uruchamiamy serwer MySQL z pominięciem sprawdzania uprawnień użytkownika:
# mysqld_safe --skip-grant-tables &
Następnie łączymy się z bazą danych za pomocą konta roota z pominięciem sprawdzania hasła:
[root@trustcom /]# mysql -u root mysql
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is *** to server version: ****
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql>
Tym samym uzyskaliśmy dostęp do konsoli MySQL i możemy dokonać odpowiednich zmian aby ponownie mieć możliwość logowania się jako root. W tym celu wydajemy następującą komendę:
mysql> UPDATE user SET password=PASSWORD("nowe_haslo") WHERE User='root' AND Host='localhost';
Oczywiście w miejscu nowe_haslo należy wpisać swoje nowe hasło dla konta root.
a następnie:
mysql> FLUSH PRIVILEGES;
Teraz nie pozostaje Nam nic innego jak wyjść z konsoli MySQL i zrestartować MySQL
mysql> quit;
Bye
Zatrzymujemy MySQL
# killall mysqld
I uruchamiamy ponownie, już w normalnym trybie pracy:
# /etc/init.d/mysql start
Teraz nie pozostaje Nam nic innego jak sprawdzić czy wprowadzone zmiany są poprawne i co najważniejsze…czy działają?
Oczywiście z poziomu konsoli serwera wydajemy następujące polecenie:
[root@trustcom /]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is to server version:
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql>
Jak widać wprowadzone zmiany odniosły skutek i możemy się logować do MySQL na konto roota.
Więcej na temat resetowania hasła dla bazy MySQL można znaleźć w oficjalnej dokumentacji projektu: http://dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html