Zmiana hasła root MySQL

102

Próbowałem zresetować moje hasło roota MySQL. Uruchomiłem tabele mysqld_safe --skip-grant-table, zaktualizowałem hasło roota i sprawdziłem tabelę użytkowników, aby upewnić się, że tam jest. Po ponownym uruchomieniu demona mysql próbowałem zalogować się przy użyciu nowego hasła roota, które właśnie ustawiłem, i nadal otrzymuję odmowę dostępu z powodu błędów użytkownika „root”. Próbowałem również całkowicie usunąć i ponownie zainstalować mysql (w tym usunąć plik my.cnf) i nadal nie mam szczęścia. Czy ktoś ma jakieś sugestie, co mogę zrobić dalej?

Z góry dziękuję

nacięcie
źródło
2
proszę opublikować swój rzeczywisty błąd
Vishwanath Dalvi
17
Jeśli nie jesteś zablokowany, SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somepassword'); jest najbezpieczniejszy.
Sabgenton
Postępowałem zgodnie z instrukcjami w filmie, aby zmienić hasło na jednym z moich serwerów youtu.be/gFo5DV_pSg8
Prem
1
Wersja serwera: 8.0.20-0ubuntu0.20.04.1 (Ubuntu) BŁĄD 1064 (42000): Wystąpił błąd w składni SQL; sprawdź podręcznik, który odpowiada Twojej wersji serwera MySQL, aby znaleźć właściwą składnię w pobliżu 'HASŁO ("1")' w linii 1 USTAW HASŁO FOR 'root' @ 'localhost' = PASSWORD ("jakieś hasło");
discpleartem

Odpowiedzi:

135
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mypass');
FLUSH PRIVILEGES;
kta
źródło
7
To działa dla mnie w 5.7, podczas gdy zaakceptowana odpowiedź nie.
Stoopkid
3
Jest to poprawne rozwiązanie, jeśli hasło root MySQL jest puste.
fschuindt
4
> AKTUALIZACJA mysql.user SET authentication_string = PASSWORD ('MyNewPass') WHERE user = 'root'; > UPRAWNIENIA PŁUKANIA; W MySQL w wersji 5.7.x nie ma już pola hasła w tabeli mysql. Został zastąpiony ciągiem uwierzytelniania.
Robert Anthony S. Tribiana,
2
To daje mi OK, ale tak naprawdę nic nie rób
Freedo
1
Wymaga dodatkowego polecenia, FLUSH PRIVILEGESaby wprowadzić zmiany bez ponownego uruchamiania serwera bazy danych.
NetVicious
64

spójrz na to w podręczniku MySQL:

Pierwsze logowanie mysql:

# mysql -u root -p

Następnie w zachęcie mysql uruchom:

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

Następnie

FLUSH PRIVILEGES;

Zajrzyj na tę stronę, aby uzyskać więcej informacji: Resetowanie hasła roota: Systemy Unix

VSB
źródło
Wystąpił błąd „Używasz bezpiecznego trybu aktualizacji i próbujesz zaktualizować tabelę bez pozycji WHERE, która używa kolumny KEY ...” podczas aktualizowania hasła użytkownika. Zobacz stackoverflow.com/questions/11448068/…, aby dowiedzieć się, jak obejść ten błąd.
Joe Borysko
BŁĄD 1064 (42000): Wystąpił błąd w składni SQL; sprawdź podręcznik, który odpowiada twojej wersji serwera MySQL, aby znaleźć właściwą składnię, której należy użyć w pobliżu '(' MyNewPass ') WHERE User =' root '' w wierszu 1
ucznia
31
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

Resetowanie hasła roota można znaleźć w dokumentacji MySQL.

iamfaith
źródło
To zapytanie działa dla mnie, ale nowe hasło nie działa (odmowa dostępu). Zaczęło działać dopiero po ponownym utworzeniu użytkownika root askubuntu.com/a/784347/160368 .
hlcs
1
działa u mnie na MySQL 8.0.20 i po zainicjowaniu folderu danych za pomocą tego poleceniamysqld --initialize --console
A. Henteti
27

To jest zaktualizowana odpowiedź dla WAMP v3.0.6 i nowszych

> UPDATE mysql.user 
> SET authentication_string=PASSWORD('MyNewPass') 
> WHERE user='root';

> FLUSH PRIVILEGES;

W MySQL w wersji 5.7.x nie ma już pola hasła w tabeli mysql. Został zastąpiony ciągiem uwierzytelniania. (To jest dla terminala / CLI)

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

FLUSH PRIVILEGES;

(To jeśli dla PHPMyAdmin lub dowolnego GUI MySQL)

Robert Anthony S. Tribiana
źródło
Ta odpowiedź jest jedną z nielicznych, którzy twierdzą, że mysql.usertabela powinna zostać zaktualizowana. Zwróć uwagę, że jeśli używasz innej bazy danych (ustawionej przez usepolecenie), pojawi się błąd, że tabela usernie istnieje. Dziękuję Panu!
Aleksandar
1
pracuje dla mnie . Używam 5.7.x, nie ma mysql.usertabeli. inne odpowiedzi są nieaktualne
Siwei Shen 申思维
Chętnie pomoże!!
Robert Anthony S. Tribiana
Wycofuję go, ponieważ zamierzam użyć> ze względu na średnik w wierszu, który jest przeznaczony dla terminala
Robert Anthony S. Tribiana
Wpłynęło to na 0 wierszy, dopasowane wiersze: 3 zmienione: 0 ...?
trainoasis
22

Znalazłem to! Zapomniałem zaszyfrować hasło, kiedy je zmieniłem. Użyłem tego zapytania, aby rozwiązać mój problem:

update user set password=PASSWORD('NEW PASSWORD') where user='root';

Zapomniałem PASSWORD('NEW PASSWORD')i po prostu wstawiłem nowe hasło zwykłym tekstem

nacięcie
źródło
wróć i zaakceptuj swoją odpowiedź, aby inni mogli zobaczyć rozwiązanie
ghostJago,
1
dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html pokazuje, jak to zrobić, --init-file=jeśli wyszedłeś.
Sabgenton
3
Masz jakiś pomysł, dlaczego kiedy używam tego samego polecenia, zwracany jest następujący błąd? Błąd 1054 (42S22): nieznana kolumna „Hasło” w „liście pól”
Adrian M.
1
Masz błąd w składni SQL; sprawdź podręcznik, który odpowiada Twojej wersji serwera MySQL, aby znaleźć właściwą składnię, której należy użyć w pobliżu '(' NOWE HASŁO '), gdzie użytkownik =' root '' w linii 1
uczeń
21

Wykonaj poniższe kroki.

krok 1. zatrzymaj mysql

krok 2. sudo mysqld_safe --skip-grant-tables

krok 3.mysql -u root

krok 4.use mysql;

krok5.show tables;

krok 6.describe user;

krok 7.update user set authentication_string=password('1111') where user='root';

zaloguj się hasłem 1111

Lokesh G.
źródło
3
flush privilegesjest ważny jako ostatni krok.
Khom Nazid
Naprawdę zrobiłem z tyłkiem. Zrobiłem wszystkie samouczki, aby zresetować hasło. Wszystko działa, z wyjątkiem tego, że loguję się przy użyciu nowego hasła, nie działa.
Shidomaru NeveRage
jeśli mysqld nie uruchamia się i komunikat taki jak ten demon mysqld z bazami danych z / var / lib / mysql mysqld_safe mysqld z pliku pid /var/run/mysqld/mysqld.pid zakończony, zrób to: mkdir / var / run / mysqld chomod 777 / var / run / mysqld i zacznij wszystko od początku
jokermt235
19

Rozglądałem się też i prawdopodobnie niektóre odpowiedzi pasują do niektórych sytuacji,

moja sytuacja to Mysql 5.7 w systemie Ubuntu 18.04.2 LTS:

(uzyskaj uprawnienia roota)

$ sudo bash

(ustaw hasło dla użytkownika root db + zaimplementuj zabezpieczenia w krokach)

# mysql_secure_installation

(daj dostęp użytkownikowi root za pomocą hasła zamiast gniazda)

(+ edycja: najwyraźniej musisz ponownie ustawić hasło?)

(nie ustawiaj go na „mySecretPassword” !!!)

# mysql -u root

mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> set password for 'root'@'localhost' = PASSWORD('mySecretPassword'); 
mysql> FLUSH PRIVILEGES;
mysql> exit;

# service mysql restart

Wielkie dzięki dla zetacu (i ericha ) za tę doskonałą odpowiedź (po kilku godzinach wyszukiwania ...)

Ciesz się :-D

S.

Edycja (2020):

Ta metoda już nie działa, zobacz to pytanie w przyszłości ...

Bamboomy
źródło
To najlepsza jak dotąd odpowiedź, przynajmniej dla serwera mysql 5.7.
Zoltán Hajdú
NAJLEPSZA odpowiedź. Dziękuję Ci.
Luciano Fantuzzi
11

W MySQL 8.0.4+

Aby zaktualizować aktualnego użytkownika root:

select current_user();
set password = 'new_password';

Aby zaktualizować innego użytkownika:

set password for 'otherUser'@'localhost' = 'new_password';

Aby ustawić politykę haseł przed aktualizacją hasła:

set global validate_password.policy = 0;
set password = 'new_password';
set password for 'otherUser'@'localhost' = 'new_password';

Inny / lepszy sposób aktualizacji hasła roota:

mysql_secure_installation

Chcesz pozostać przy uwierzytelnianiu 5.x, aby nadal korzystać ze starszych aplikacji?

Na my.cnf

default_authentication_plugin = mysql_native_password

Aby zaktualizować root:

set global validate_password.policy = 0;
alter user 'root'@'localhost' identified with mysql_native_password by 'new_password';
Carlito
źródło
7

To zadziałało dla mnie -

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

https://dev.mysql.com/doc/mysql-windows-excerpt/5.7/en/resetting-permissions-windows.html

LV98
źródło
BŁĄD 1064 (42000): Wystąpił błąd w składni SQL; sprawdź podręcznik, który odpowiada Twojej wersji serwera MySQL, aby uzyskać właściwą składnię, której należy użyć w pobliżu `` IDENTIFIED BY 'MyNewPass' 'w linii 1
trainoasis
Właśnie skopiowałem dokładnie w sql przez CLI: o
trainoasis
Oczywiście, wysłałem do mojego serwera + mysql -u root -p, aby dostać się do mysql cli
trainoasis
6

Musisz zresetować hasło! kroki dla systemu Mac OSX (przetestowane i działające) i Ubuntu

Zatrzymaj MySQL

$ sudo /usr/local/mysql/support-files/mysql.server stop

Uruchom w trybie awaryjnym:

$ sudo mysqld_safe --skip-grant-tables

(powyżej linii jest całe polecenie)

Będzie to ciągłe polecenie do zakończenia procesu, więc otwórz kolejne okno powłoki / terminala, zaloguj się bez hasła:

$ mysql -u root

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

Uruchom MySQL

sudo /usr/local/mysql/support-files/mysql.server start

Twoje nowe hasło to „hasło”.

tk_
źródło
Otrzymałem wiadomość: nie wybrano bazy danych
Mimouni
@Mimouni spróbuj tego: stackoverflow.com/questions/21944936/…
tk_
5

Dla MySQL 5.7.6 i nowszych:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

MySQL 5.7.5 i wcześniejsze:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
Sokole oko
źródło
3

W przypadku najnowszej wersji mysql (8.0.16) żadna z tych odpowiedzi nie zadziałała.

Po przyjrzeniu się kilku różnym odpowiedziom i połączeniu ich razem, oto co ostatecznie zadziałało:

update user set authentication_string='test' where user='root';

Mam nadzieję że to pomoże.

Suhas
źródło
2

Częstym błędem, na który napotykam od czasu do czasu, jest to, że zapomniałem -popcji, więc czy na pewno użyłeś:

mysql -u root -p
Marian Theisen
źródło
2

W MySQL 5.7 hasło jest zastępowane ciągiem „authentication_string”.

posługiwać się

update user set authentication_string=password('myfavpassword') where user='root';
Kamal Reddy
źródło
2

Użycie narzędzia wiersza poleceń mysqladmin do zmiany hasła MySQL:

mysqladmin --user=root --password=oldpassword password "newpassword"

Źródło

Darush
źródło
1

Wypróbowałem odpowiedź z @kta, ale nie zadziałała.

Używam MySQL 8.0

To zadziałało dla mnie:

mysql> SET PASSWORD FOR 'root'@'localhost' = 'yourpassword'

schody łańcuchowe
źródło
1
Dodaj wyjaśnienie do swojego kodu - jak dokładnie rozwiązuje to pytanie sprzed siedmiu lat?
Nico Haase
Wygląda na to, że składnia została zmieniona w ciągu siedmiu lat. To nie jest zawijanie hasła za pomocą HASŁA () dev.mysql.com/doc/refman/8.0/en/set-password.html
kangkyu
Skrót
1

Tak wiele komentarzy, ale pomogła mi ta metoda:

sudo mysqladmin -u root password 'my password'

W moim przypadku po instalacji otrzymałem usługę mysql bez hasła dla użytkownika root i musiałem ustawić hasło dla mojego bezpieczeństwa.

Konstantin Romanovsky
źródło
Można go użyć do zresetowania hasła użytkownika root mysql bez znajomości starego. Ale upewnij się, że nikt nie ma dostępu do twojego syslogu, ponieważ to hasło jest rejestrowane:Aug 07 16:21:55 ubuntupc sudo[93250]: user : TTY=pts/0 ; PWD=/home/user ; USER=root ; COMMAND=/usr/bin/mysqladmin -u root password 'my password'
Gryu
0

zatrzymaj wszystkie usługi wamp, wyjdź z wampa.

otwórz notatnik, a następnie wpisz> USTAW HASŁO DLA 'root' @ 'localhost' = PASSWORD ('');

następnie zapisz go na c: dysk pod dowolną nazwą .. na przykład „c: /example.txt”

teraz idź do swojego „wamp” falder wamp> bin> mysql> mysql (twoja wersja)> bin w mojej skrzynce ścieżka to „C: \ wamp \ bin \ mysql \ mysql5.6.17 \ bin”

teraz skopiuj ścieżkę, a następnie uruchom cmd z (ctrl + r), a następnie wpisz „cmd” (enter)

wpisz cd, a następnie kliknij prawym przyciskiem myszy cmd i wklej ścieżkę (enter) teraz wpisz (mysqld --init-file = C: \ example.txt) bez nawiasów klamrowych następnie (enter)

następnie uruchom ponownie komputer lub otwórz taskmgr i zabij mysqld.exe

uruchom wampa, a twoje hasło zostanie usunięte ...

MohitGhodasara
źródło
0

Dla użytkowników MacOS, jeśli zapomnisz hasła roota, odpowiedź @ thusharaK ( https://stackoverflow.com/a/28601069/5628856 ) jest dobra, ale jest trochę więcej sztuczek:

Jeśli używasz preferencji systemowych, aby uruchomić mysql serveride, po prostu

sudo mysqld_safe --skip-grant-tables

może nie działać dla Ciebie.

Musisz upewnić się, że argumenty wiersza poleceń są takie same, jak w przypadku konfiguracji startowej systemu.

Następujące polecenie działa dla mnie:

/usr/local/mysql/bin/mysqld --user=_mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --log-error=/usr/local/mysql/data/mysqld.local.err --pid-file=/usr/local/mysql/data/mysqld.local.pid --keyring-file-data=/usr/local/mysql/keyring/keyring --early-plugin-load=keyring_file=keyring_file.so --skip-grant-tables

Możesz użyć

ps aux | grep mysql

sprawdzić własne.

Shaofei Cheng
źródło
0

Lub po prostu użyj interaktywnej konfiguracji:

sudo mysql_secure_installation
shilovk
źródło
-1

W systemie Ubuntu

sudo dpkg-reconfigure mysql-server-5.5 

Zastąp 5.5swoją aktualną wersją, a zostaniesz poproszony o podanie nowego hasła roota.

Mouneer
źródło
W jakim systemie operacyjnym? To nie ma sensu.
Khom Nazid
-1
  1. Na Macu otwórz preferencje systemowe> MySQL.
  2. W sekcji konfiguracji MySQL sprawdź zainicjowanie bazy danych.
  3. zmień hasło w monicie. zainicjuj bazę danych
NNK Teja
źródło