Jak zmienić hasło MySQL dla użytkownika root i zwykłych użytkowników
Zapomniałeś hasła administratora MySQL? Nie martw się, zdarza się to nawet doświadczonym administratorom. W tym artykule wyjaśnimy, jak zresetować hasło administratora MySQL dla różnych wersji: MySQL 5.7 i MySQL 8.0+. Dodatkowo omówimy, jak zresetować hasło zwykłego użytkownika bazy danych.
W przypadku MariaDB zapoznaj się z naszym osobnym przewodnikiem.
Root to główny administrator bazy danych. Posiada pełny dostęp do wszystkich danych i ustawień. Jeśli zapomnisz tego hasła, modyfikowanie niektórych ustawień i wykonywanie niektórych poleceń nie będzie już możliwe.
Wszystkie operacje będą wykonywane za pośrednictwem wiersza poleceń przez SSH. Więcej szczegółowych instrukcji dotyczących połączenia z serwerem za pomocą tego protokołu znajdziesz w tym artykule.
Przed przystąpieniem do pracy sprawdź zawartość pliku /root/.my.cnf. Często zawiera on bieżące hasło administratora do dostępu do MySQL.
Możesz przetestować połączenie za pomocą polecenia:
mysql -u root -p
Następnie wprowadź hasło z pliku .my.cnf.
Jeśli hasło nie działa, postępuj zgodnie z poniższymi instrukcjami.
Jak zresetować hasło administratora MySQL
Krok 1: Zatrzymaj MySQL
Aby zresetować hasło, najpierw musisz zatrzymać MySQL. Wprowadź następujące polecenie:
- Dla Debian i Ubuntu:
systemctl stop mysql
- Dla CentOS/RockyLinux/AlmaLinux:
systemctl stop mysqld
Krok 2: Uruchom serwer w trybie awaryjnym
- Dla Debian i Ubuntu:
Upewnij się, że katalog, z którego MySQL będzie uruchamiany, istnieje i ma odpowiedniego właściciela:
mkdir -p /var/run/mysqld/ && chown -R mysql: /var/run/mysqld/
Uruchom serwer MySQL bez kontroli dostępu:
mysqld_safe --skip-grant-tables --socket=/var/run/mysqld/mysqld.sock &
Jeśli MySQL uruchomi się poprawnie, zobaczysz komunikat podobny do:
2024-11-28T23:50:19.298141Z mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
Aby kontynuować pracę w wierszu poleceń, naciśnij „Ctrl + C”.
- Dla CentOS/RockyLinux/AlmaLinux:
sudo -u mysql mysqld --skip-grant-tables --socket=/var/run/mysqld/mysqld.sock &
Krok 3: Połącz się z MySQL
mysql --socket=/var/run/mysqld/mysqld.sock
Krok 4: Zresetuj hasło
- Dla MySQL 5.7 wykonaj sekwencyjnie następujące polecenia:
FLUSH PRIVILEGES;
Dla użytkownika lokalnego:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
Dla użytkownika sieciowego (jeśli istnieje):
ALTER USER 'root'@'%' IDENTIFIED BY 'NewPassword';
Następnie:
FLUSH PRIVILEGES;
Zastąp NewPassword nowym, żądanym hasłem.
'user'@'localhost' odnosi się do użytkownika lokalnego łączącego się przez socket lub localhost. 'user'@'%' odnosi się do użytkownika sieciowego z dostępem z dowolnego adresu IP.
Możesz ustawić te same lub różne hasła dla tych użytkowników. Jeśli użytkownik sieciowy nie istnieje, polecenie @'%' zakończy się błędem.
Wyjdź z MySQL, wpisując komendę exit lub naciskając „Ctrl + D”.
- Dla MySQL 8.0+ wykonaj następujące polecenia:
FLUSH PRIVILEGES;
Dla użytkownika lokalnego:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewPassword';
Dla użytkownika sieciowego (jeśli istnieje):
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'NewPassword';
Następnie:
FLUSH PRIVILEGES;
Zastąp NewPassword nowym, żądanym hasłem.
Wyjdź z MySQL, wpisując komendę exit lub naciskając „Ctrl + D”.
Krok 5: Uruchom ponownie MySQL
Zatrzymaj MySQL:
mysqladmin shutdown --socket=/var/run/mysqld/mysqld.sock -p
Następnie wprowadź wcześniej ustawione hasło administratora.
Uruchom MySQL w normalnym trybie:
- Dla Debian i Ubuntu:
systemctl start mysql
- Dla CentOS/RockyLinux/AlmaLinux:
systemctl start mysqld
Jak zresetować hasło dla zwykłych użytkowników
Jeśli zapomniałeś hasła dla użytkownika innego niż root, podejście jest podobne:
- Połącz się z serwerem MySQL jako root:
mysql -u root -p
Wprowadź swoje hasło administratora MySQL.
- Wykonaj polecenie, aby zmienić hasło:
- MySQL 5.7:
Dla użytkownika lokalnego:
ALTER USER 'username'@'localhost' IDENTIFIED BY 'NewUserPassword';
Dla użytkownika sieciowego (jeśli istnieje):
ALTER USER 'username'@'%' IDENTIFIED BY 'NewUserPassword';
Następnie:
FLUSH PRIVILEGES;
Zastąp username istniejącą nazwą użytkownika i NewUserPassword nowym, żądanym hasłem.
Wyjdź z MySQL, wpisując komendę exit lub naciskając „Ctrl + D”.
- MySQL 8.0+:
Dla użytkownika lokalnego:
ALTER USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewPassword';
Dla użytkownika sieciowego (jeśli istnieje):
ALTER USER 'username'@'%' IDENTIFIED WITH mysql_native_password BY 'NewPassword';
Zastąp username istniejącą nazwą użytkownika i NewUserPassword nowym, żądanym hasłem.
Następnie wyjdź z MySQL, wpisując komendę exit lub naciskając kombinację klawiszy „Ctrl + D”.
Jeśli to konieczne, możesz wyświetlić listę wszystkich użytkowników za pomocą następującego zapytania:
SELECT User, Host FROM mysql.user;
Jak połączyć się z MySQL lokalnie bez podawania hasła
Aby uniknąć ręcznego wprowadzania hasła za każdym razem, gdy łączysz się z MySQL z wiersza poleceń na swoim serwerze, możesz zapisać je w pliku /root/.my.cnf. Otwórz plik w edytorze tekstu:
nano /root/.my.cnf
Dodaj następujące wiersze:
[client]
user = root
password = YourRootPassword
Zastąp YourRootPassword swoim faktycznym hasłem administratora.
Następnie zapisz plik, naciskając kombinację klawiszy „Ctrl + O”, i zamknij edytor tekstu, naciskając „Ctrl + X”.
Ze względów bezpieczeństwa ustaw bardziej rygorystyczne uprawnienia dla pliku .my.cnf:
chmod 600 /root/.my.cnf
Po tej konfiguracji możesz połączyć się, uruchamiając po prostu polecenie:
mysql -u root