Hasło roota mysql homebrew MacOSX

116

Z jakiegoś powodu MySQL przestał udzielać dostępu rootowi. Odinstalowano i ponownie zainstalowano z Homebrew. Świeża instalacja, świeże stoły, ale kiedy wchodzę

mysql -u root -p

Otrzymuję ten błąd:

Odmowa dostępu dla użytkownika „root” @ „localhost” (przy użyciu hasła: NIE)

Ponownie instalowałem MySQL pięć razy, ale nadal prosi o hasło. Jak to naprawić?

Alisher Ulugbekov
źródło
W superużytkowniku jest prawie dokładne pytanie. Wykonaj następujące kroki: superuser.com/a/400345
Icarus
13
Po prostu biegnij mysql_secure_installationi odpowiedz na zadane pytania, proste
Abhinav Singh
8
Polecenie mysql_secure_installation monituje o hasło roota; jeśli go ustawiłeś i zapomniałeś, ta procedura nie pomoże.
JohnG
1
Jeśli brew zainstalował MySQL 5.7, wykonaj następujące kroki: stackoverflow.com/a/33924648/133106
mrucci
mysql -u rootPracowało tu FWIW ...
rogerdpack

Odpowiedzi:

116

Po prostu uruchom to polecenie (gdzie NEWPASSjest twoje hasło):

$(brew --prefix mysql)/bin/mysqladmin -u root password NEWPASS

Miałem ten sam błąd i naprawiłem go w ten sposób.

egermano
źródło
16
Pracował dla mnie. Oczywiście (być może) znak dolara ($) musi być wprowadzony jako część polecenia (to nie jest tylko zachęta powłoki).
płyty grzewcze
3
Zalecałbym nie włączać NEWPASS do polecenia, aby uniknąć przechowywania w pliku historii powłoki. To polecenie automatycznie zapyta o dane wejściowe, jeśli uruchomisz je bez przejścia, więc nie ma powodu. :)
Levi Figueira
4
jeśli używasz mariadb:$(brew --prefix mariadb)/bin/mysqladmin -u root password NEWPASS
bryceadams
8
Nie działa dla mnie, z mariadb (nawet z notatką @bryceadams): / usr / local / opt / mariadb / bin / mysqladmin: połączenie z serwerem na 'localhost' nie powiodło się błąd: 'Odmowa dostępu dla użytkownika' root '@' localhost ' '
trainoasis
3
dla mariadb, jeśli uzyskasz odmowę dostępu dla użytkownika:sudo $(brew --prefix mariadb)/bin/mysqladmin -u root password NEWPASS
upful
110

Żaden z nich nie działał dla mnie. Myślę, że miałem już mysql gdzieś na moim komputerze, więc hasło zostało tam ustawione lub coś w tym stylu. Po spędzeniu wielu godzin na wypróbowywaniu każdego rozwiązania, oto co zadziałało:

$ brew services stop mysql
$ pkill mysqld
$ rm -rf /usr/local/var/mysql/ # NOTE: this will delete your existing database!!!
$ brew postinstall mysql
$ brew services restart mysql
$ mysql -uroot

wszystkie zasługi dla @Ghrua

stackPusher
źródło
6
poprzednie posty nie działały dla mnie, ale ten, choć destrukcyjny, działał świetnie.
Clay
1
kiedy w końcu jesteś zalogowany do mysql, użyj, ALTER USER 'root'@'localhost' IDENTIFIED BY 'YOURNEWPASSWORD';aby ustawić nowe hasło roota.
Martin Braun
To zadziałało dla mnie bez usuwania mojej istniejącej bazy danych
Mwirabua Tim
Wreszcie właściwe rozwiązanie robocze. @ 2020 MacOs catalina.
Mindaugas Kurlys
To działało dla mnie, gdy poprzednie rozwiązanie nie działało. Dziękuję Ci!
Les Brown
65

W przypadku, gdy nieumyślnie ustawiłeś i zapomniałeś hasła roota, i nie chcesz wyczyścić wszystkich baz danych i zacząć od nowa, ponieważ jesteś leniwy i zapomniałeś mieć rozwiązanie do tworzenia kopii zapasowych na miejscu, a używasz dość niedawnej instalacji Homebrew (Zima 2013), oto kroki, aby zresetować hasło do MySQL.

Zatrzymaj aktualnie działającą instancję MySQL

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

Teraz uruchom mysql ręcznie, pomijając tabele grantów i sieci

$(brew --prefix mysql)/bin/mysqld_safe --skip-grant-tables --skip-networking

Zauważ, że jeśli uruchomisz echo $ (brew --prefix mysql) i nie odpowiada ono jako „/ usr / local / opt / mysql” w bash, będziesz musiał odpowiednio dostosować ścieżkę.

Gdy to zrobisz, powinieneś mieć uruchomioną, niezabezpieczoną instancję MySQL.

Zaloguj się i ustaw hasło

mysql -u root

Po wyświetleniu monitu wprowadź następujące polecenie MySQL, aby ustawić nowe hasło dla użytkownika, którego dotyczy zmiana.

mysql> update mysql.user set password=PASSWORD('new_password_here') WHERE user='root';

Gdyby wszystko poszło zgodnie z planem, powinno powiedzieć:

Query OK, 1 row affected (0.02 sec)
Rows matched: 4  Changed: 1  Warnings: 0

Wyjdź z zachęty MySQL.

mysql> exit
Bye

Zatrzymaj serwer:

mysqladmin -u root shutdown

Teraz odłóżmy demona uruchamiania, abyśmy mieli ponownie gotowy MySQL:

launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

Gratulacje. Właśnie zresetowałeś swoje hasło root mysql. Nalej sobie kawę i przygotuj rozwiązanie zapasowe!

emblematyczny
źródło
5
Aby zatrzymać niezabezpieczony serwer MySQL po zmianie hasła:mysqladmin -u root shutdown
Vebjorn Ljosa
9
Właśnie natknąłem się na ten problem i stwierdziłem, że ta odpowiedź jest najbliższa. Zauważyłem, że passwordnie była to prawidłowa kolumna w mysql 5.7.9. Zamiast tego musiałem użyć authentication_string. Reszta instrukcji działała idealnie. Dzięki!
M. Scott Ford
5
Jak powiedział M. Scott Ford, właściwe polecenie brzmi:update user set authentication_string=password('new_password_here') where user='root';
Panayotis
3
Musiałem biec update mysql.user set authentication_string=password('none') where user='root';, żeby to zadziałało. (Podobnie jak w komentarzu tuż nad mną, ale poprzedzić mysql.do user.)
Steve Meisner
2
funkcja hasła została usunięta od mysql 8.0.11. szczegóły więcej
chancyWu
62

Kilka dni temu miałem ten sam problem. Dzieje się tak, gdy instalujesz mysqlprzez homebrewi uruchamiasz skrypt inicjalizacyjny ( mysql_install_db) przed uruchomieniem mysqldemona.

Aby to naprawić, możesz usunąć mysqlpliki danych, zrestartować usługę, a następnie uruchomić skrypt inicjalizacyjny:

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
rm -r /usr/local/var/mysql/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
unset TMPDIR
mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp
Britto
źródło
działało idealnie dla mnie. Właściwie nie chcę ustawiać hasła dla mojego komputera lokalnego, więc inne rozwiązania nie są tym, czego szukam
brad
3
mysql_install_db jest przestarzałe, rozważ użyciemysqld --initialize
Brian
1
Po prostu dostaję, No such file or directorykiedy uruchamiam to pierwsze polecenie.
Agent Zebra,
1
po uruchomieniu polecenia mysqld --initialize zauważysz w komunikacie logowania na konsoli, że ustawił tymczasowe hasło dla użytkownika root .. skopiuj to i użyj hasła przy następnym uruchomieniu polecenia "mysql -uroot -p" - To na pewno zadziała. . a następnie mysql poprosi Cię o zresetowanie hasła .. sprawdź to dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html
Vikrant Labde
@VikrantLabde "To na pewno zadziała" - bardzo ambitne stwierdzenie. Próbowałem tego, użyłem tymczasowego hasła, które mi dało, ale nadal nie zapewniało dostępu. Czy musiałeś uciec przed jakąkolwiek interpunkcją odwrotnym ukośnikiem?
Max Goodridge
47

Otrzymałem ten błąd po zainstalowaniu mysql przez home brew.

Więc najpierw usuń instalację. Następnie zainstaluj ponownie przez Homebrew

brew update
brew doctor
brew install mysql

Następnie zrestartuj usługę mysql

 mysql.server restart

Następnie uruchom to polecenie, aby ustawić nowe hasło roota.

 mysql_secure_installation

Na koniec poprosi o ponowne załadowanie uprawnień. Powiedz tak. Następnie zaloguj się ponownie do mysql. I użyj nowego hasła, które ustawiłeś.

mysql -u root -p
Nirojan Selvanathan
źródło
1
To idealne rozwiązanie. Próbowałem już biegać, mysql_secure_installationale kluczową częścią byłmysql.server restart
Johan,
mysql_secure_installation był kluczowym elementem
Nik
Aby uniknąć bólu głowy ... po prostu wpisz polecenie restartu, jak mówi nirojan, a następnie uruchom mysql_secure_installation
Dan Zuzevich
13

Jeśli uciekniesz

brew install mariadb
...
brew services start mariadb
==> Successfully started `mariadb` (label: homebrew.mxcl.mariadb)

 $(brew --prefix mariadb)/bin/mysqladmin -u root password newpass
/usr/local/opt/mariadb/bin/mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost''

również logowanie z kontem root nie powiedzie się:

mariadb -u root
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

następnie użytkownik domyślny administrator jest tworzony samą nazwę jak twoi MacOS konto użytkownika , np johnsmit .

Aby zalogować się jako root, wyślij:

mariadb -u johnsmit
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 17
Server version: 10.4.11-MariaDB Homebrew

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> exit
Bye
Arunas Bartisius
źródło
Nazwa konta MacOS zrobiła to za mnie.
Dan
czy mogę dodać hasło dla użytkownika nazwy konta macOS?
OrigamiEye
7

To zadziałało dla mnie:

sudo mysql -u root
Béatrice Cassistat
źródło
4

Właśnie zauważyłem coś wspólnego dla większości odpowiedzi tutaj i potwierdziłem to podczas mojej nowej instalacji. Jest to naprawdę oczywiste, jeśli spojrzysz na zalecenia, mysqladmin -u rootbez których należy działać -p.

Brak hasła.

Brew ustawia mysql tylko z użytkownikiem root i bez hasła. Wydaje mi się, że ma to sens, ale zastrzeżenia po instalacji w ogóle o tym nie wspominają.

Spyder
źródło
2
Miałem problem z odmową dostępu przy założeniu braku hasła roota, więc nie sądzę, że problem jest oczywisty.
Jack Frost,
Nie twierdzę, że problem jest oczywisty; dla każdego, kto używał MySQL w normalnych okolicznościach, jest to całkowicie mylące. Ale patrząc na inne odpowiedzi, powód jest jasny.
Spyder
3

Spróbuj za pomocą, sudoaby uniknąć błędu „Odmowa dostępu”:

sudo $(brew --prefix mariadb)/bin/mysqladmin -u root password NEWPASS

Matias Miranda
źródło
3

Ponieważ pytanie zostało zadane / odpowiedział dawno temu, te najlepsze odpowiedzi nie działają dla mnie. Oto moje rozwiązanie w 2020 roku.

Tło : Świeży mysql / mariadb zainstalowany przez homebrew.

Problem : Hasło roota nie jest puste i nieznane.

Poprawka :

  1. mysql -u NAZWA-UŻYTKOWNIKA-SYSTEMU -p
  2. Hasło jest puste (naciśnij enter)
  3. ALTER USER 'root' @ 'localhost' IDENTYFIKOWANE PRZEZ 'NEW-ROOT-PASSWORD';
  4. PRZYWILEJE PŁUKANIA;

Powód :

  1. Homebrew utworzy użytkownika z uprawnieniami roota nazwanymi według aktualnej nazwy użytkownika MacOS.
  2. nie ma hasła
  3. Ponieważ ma wszystkie uprawnienia, po prostu zresetuj hasło roota z tym użytkownikiem.
  4. Początkowe hasło roota zostało wygenerowane losowo.
Shiji.J
źródło
Prawidłowa odpowiedź 2020. Nie mogę poprosić o hasło dla nazwy użytkownika MacOS
OrigamiEye
2
  1. przejdź do ikony Apple -> preferencje systemowe
  2. otwórz MySQL
  3. w instancjach zobaczysz „zainicjuj bazę danych”
  4. kliknij na to
  5. zostaniesz poproszony o ustawienie hasła dla roota -> ustaw tam silne hasło
  6. użyj tego hasła, aby zalogować się w mysql od następnego razu

Mam nadzieję że to pomoże.

user3325650
źródło
Prosty i łatwy sposób. Dzięki.
Ezequiel França
1

Uruchomienie tych linii w terminalu załatwiło sprawę mnie i kilku innym, którzy mieli ten sam problem. Te instrukcje są wyświetlane w terminalu po pomyślnym zainstalowaniu mysql przez brew.

mkdir -p ~/Library/LaunchAgents

cp /usr/local/Cellar/mysql/5.5.25a/homebrew.mxcl.mysql.plist ~/Library/LaunchAgents/

launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

/usr/local/Cellar/mysql/5.5.25a/bin/mysqladmin -u root password 'YOURPASSWORD'

gdzie YOURPASSWORDjest hasło do roota.

erin
źródło
Po prostu dostaję, No such file or directorykiedy wykonuję te polecenia
Agent Zebra,
1

Sprawdź, czy nie masz pliku .my.cnf ukrytego w swoim katalogu domowym. To był mój problem.

user8845989
źródło
1

To zadziałało dla mnie dla MAC https://flipdazed.github.io/blog/osx%20maintenance/set-up-mysql-osx

Uruchom mysql, uruchamiając

usługi parzenia start mysql

Uruchom skrypt instalacyjny

mysql_secure_installation

Zostaniesz poproszony o skonfigurowanie wtyczki WERYFIKUJ HASŁO. Wpisz y, aby to zrobić.

Wybierz wymaganą weryfikację hasła (nie ma znaczenia, czy tylko Ty korzystasz z bazy danych)

Teraz wybierz y dla wszystkich pozostałych opcji: Usuń anon. użytkownicy; nie zezwalaj na zdalne logowanie jako root; usuń testową bazę danych; przeładować tabele uprawnień. Teraz powinieneś otrzymać wiadomość o

All done!

Katie Lee
źródło
aby uruchomić mysql 5.7, użyj stackoverflow.com/questions/51573145/ ...
Adam Winnipass
1

To zadziałało dla mnie. Miejmy nadzieję, że to działa również dla Ciebie !!! Podążaj za nimi.

brew services stop mysql
pkill mysqld
# NB: the following command will REMOVE all your databases!
# Make sure you have backups or SQL dumps if you have important data in them already.
rm -rf /usr/local/var/mysql/
brew services restart mysql

mysql -uroot
UPDATE mysql.user SET authentication_string=null WHERE User='root';
FLUSH PRIVILEGES;
exit;

mysql -u root 
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password 
BY'YOUR_PASS_WORD!!!!';
heyfranksmile
źródło
2
Musisz ostrzec, że uruchomienie rm -rf /usr/local/var/mysql/polecenia spowoduje usunięcie wszystkich baz danych i danych MySQL na Twoim komputerze!
Lashae
0

Domyślne hasło podczas instalacji mysql przez brew to root, spróbuj tego, zadziałało

mysql -uroot -proot

user3805033
źródło
1
Od brew info mysql: Zainstalowaliśmy bazę danych MySQL bez hasła roota. Aby go zabezpieczyć, uruchom: mysql_secure_installation
ssc
@ssc Najlepszy sposób na ustawienie hasła w przypadku czystej instalacji.
alexventuraio,
0

Terminal 1:

$ mysql_safe

Terminal 2:

$ mysql -u root
mysql> UPDATE mysql.user SET Password=PASSWORD('new-password') WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> quit
Dnyanesh Ghadge
źródło
Mogło to zadziałać w momencie wysłania odpowiedzi, ale w międzyczasie się zepsuło; z (aktualną) wersją MySQL 5.7.21, nie powiedzie się z `` Nieznaną kolumną 'Hasło' na 'liście pól' '.
ssc
UPDATE mysql.user SET authentication_string = PASSWORD ('xxxxxx!') WHERE User = 'root';
kevinc
0

Używam Cataliny i używam tego mysql_secure_installationpolecenia, a teraz działa dla mnie:

$ mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): << enter root here >>

wprowadzam rootjako aktualne hasło

OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

i zajmij się resztą

Agus Sudarmanto
źródło
0

Więc na wypadek, gdyby ktoś miał taką samą sytuację i konfigurację jak ja i też zaraz oszaleje - to zadziałało mnie .

Po długiej historii miałem zainstalowaną MariaDB, która automatycznie uruchamiała się ponownie, gdy zabiłem jej proces (to było robione przez brew), która miała hasło roota, którego nie znałem.

$ brew services list

To pokazuje coś takiego:

mariadb started jdoe /path/to/homebrew.mxcl.mariadb.plist

Zatrzymaj serwer MySQL za pomocą:

$ brew services stop mariadb

Następnie uruchom go ponownie bez użytkownika root (i nie używając brew):

$ mariadbd --skip-grant-tables &

Tutaj mysql_secure_installationnie zadziałało u mnie z powodu --skip-grant-tables, a bez tego nie zadziałałoby, --skip-grant-tablesbo potrzebne było hasło (którego nie miałem).
Próba $(brew --prefix mysql)/bin/mysqladmin -u root password hunter2zwróciła tylko dziwne błędy i nic nie dała; $(brew --prefix mariadb)/bin/mysqladmin -u root password hunter2również nie działał, podawał różne błędy i sugestie, które nie działały dla mnie.

Ale może zalogować się do mysql teraz bez mandatów:$ mysql

W tym przypadku stara metoda aktualizowania tabeli użytkowników dla roota nie działa, ponieważ „Hasło kolumny” nie jest aktualizowalne ”.
Nowa metoda używa, alter userALE działa tylko wtedy, gdy to zrobisz flush privileges;, zrób to najpierw.
Następnie:
MariaDB [(none)]> alter user 'root'@'localhost' identified by 'hunter2';
( MariaDB [(none)]>jest MySQL szybka tutaj)
wtedy zrobićflush privileges; ponownie.
Zamknij klienta MySQL.

Jeśli chodzi o napar, MariaDB nadal nie działa, więc użyj go, $ ps aux | grep -i mariadbaby znaleźć pid i $ kill -9 <pid>to.
Następnie użyj, $ brew services start mariadbaby rozpocząć ponownie.

MSpreij
źródło
-1

Użyj pliku init, aby uruchomić mysql i zmienić hasło roota.

brew services stop mysql
pkill mysqld
echo "ALTER USER 'root'@'localhost' IDENTIFIED BY 'newRootPass';" > /tmp/mysql-init
$(brew --prefix mysql)/bin/mysqld --init-file=/tmp/mysql-init

Twoje hasło roota zostało zmienione. Upewnij się, że serwer został poprawnie zamknięty, aby zapisać zmianę hasła. W nowym oknie terminala wykonaj

mysqladmin -u root -p shutdown

i wprowadź nową przepustkę.

Uruchom usługę i usuń plik init

brew services start mysql
rm /tmp/mysql-init

Testowane na mysql w wersji 8.0.19

Sten
źródło