Wstęp
Cześć, zapewne nie tylko ja próbując zalogować się do rzadko używanej bazy danych zobaczyłem piękny komunikat ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES). W nerwach upewniam się, czy aby na pewno wpisałem poprawne hasło, może jakaś literówka albo źle wpisany użytkownik. No tak... nie tylko chwile są ulotne - hasła też :kappa:
Zablokowanie dostępu zewnętrznego (jeśli był odblokowany)
Ten podpunkt jest dosyć kluczowy, pisał o nim także @bopke w już dosyć leciwym poradniku https://lvlup.rok.ovh/t/reset-hasla-mysql-na-serwerze-vps/12594?u=kredens. W skrócie jeżeli mamy odblokowany dostęp z zewnątrz do bazy danych musimy go wyłączyć na czas operacji na otwartym sercu żeby żaden sąsiad złodziej :nosacz: nie zrobił nam z naszej bazy talibskiej wioski po ataku amerykanów :kappa:. Dobra ty kredens skończ tu pisać tylko tłumacz.
Jeżeli mamy zainstalowaną bazę danych MySQL udajemy się do pliku /etc/mysql/mysql.conf.d/mysqld.cnf
i szukamy złotego pociągu linijki, w której znajduje się fraza bind-address
. W MariaDB podobnie, ale inaczej :thinksmart:. Wchodzimy do pliku /etc/mysql/mariadb.conf.d/50-server.cnf
i również szukamy frazę bind-address
. Jeżeli zawartość linijki wygląda tak:
bind-address = 127.0.0.1
No przechodzimy do kolejnego kroku. Gdy nasz adres się różni stawiamy obok bind-address stawiamy # i dopisujemy:
#bind-address = 0.0.0.0 bind-address = 127.0.0.1
Sprawdzenie wersji serwera bazy danych
Żeby sprawdzić wersję naszego serwera wpisujemy (ta wiadomość przyda się w kolejnych krokach):
mysql --version
Zatrzymanie serwera i reset hasła
Pierwszym krokiem będzie zatrzymanie serwera bazy danych:
sudo systemctl stop mysql
Dla serwera MariaDB możemy użyć polecenia (to wyżej też powinno zadziałać):
sudo systemctl stop mariadb
Gdy nasz serwer już stoi na stacji lokomotywa,Ciężka, ogromna i pot z niej spływa uruchamiamy go w trybie, który powstrzyma wczytanie tabelek. dodatkowo zabronimy mu korzystania z sieci (lepiej chuchać na zimne :nosacz:):
sudo mysqld_safe --skip-grant-tables --skip-networking &
W następnym kroku logujemy się do bazy jak gdyby nigdy nic się nie stało :thinksmart:
mysql -u root
Teraz grzecznie mówimy serwerowi: E ty kolego ale teraz to mi załaduj tabelki bo jak nie to... będzie apt-get purge :kappa:
FLUSH PRIVILEGES;
Dam dara dam 🎉 👏 no i docieramy do najważniejszego momentu - dobrego domowego obiadu zmiany hasła!
Przypominamy sobie jaką wersję bazy danych mamy i postępujemy za niżej zapisanymi poleceniami:
Jeżeli nasz serwer MySQL jest w wersji 5.7.6 lub nowszej, a także MariaDB ma wersję 10.1.20 lub wyższą, użyjemy tłuczka do ziemniaków żeby zmienić hasło:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'ChrzaszczBrzmiWTrzcinie';
Gdzie ChrzaszczBrzmiWTrzcinie to nasze nowe hasło!
Sprawa ma się inaczej jeżeli nasz serwer MySQL mamy w wersji 5.7.5 lub starszej a MariaDB 10.1.20 lub starszej:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('Maki5GramOdleciecSam');
Gdzie Maki5GramOdleciecSam to nasze nowe hasło!
Zostaje nam już tylko wyłącznie bazy danych komendą:
shutdown;
I wyjście z niej wpisaniem polecenia:
exit;
UWAGA! Jeżeli zmieniałeś bind-address
w drugim kroku to odpowiedni czas na przywrócenie starej konfiguracji!
Finalnie zostaje nam tylko włączyć bazę danych i cieszyć się nowym serwerem z https://www.lvlup.pro/pl świeżo zmienionym hasłem!
Włączamy bazę danych poleceniem:
sudo systemctl start mysql
Lub w przypadku MariaDB (to wyżej też powinno zadziałać):
sudo systemctl start mariadb