Nie można zresetować hasła roota MySQL, próbowałem wszystkiego

9

Cóż, najpierw wyjaśnijmy, że przeczytałem wszystkie pytania Ask Ubuntu dotyczące tego problemu i wykonałem wszystkie kroki z oficjalnych dokumentów:

help.ubuntu.com

dev.mysql.com

Używam Ubuntu 16.04.1 LTS

Zanim ktoś zasugeruje cokolwiek, co prawdopodobnie już próbowałem, pokażę, co zrobiłem:

root@localhost:/# sudo /etc/init.d/mysql stop
[ ok ] Stopping mysql (via systemctl): mysql.service.

MySQL zatrzymał się poprawnie.

root@localhost:/# sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &
[1] 3316
root@localhost:/#

Tutaj nie wiem, czy to działało, czy nie, więc i tak wykonuję te czynności.

root@localhost:/# mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
root@localhost:/#

Wygląda na to, że nie działa, ponieważ usługa nie została uruchomiona. Ponieważ nie mogę przejść do następnych kroków, wypróbowuję inną metodę (czyszczenie).

Po użyciu:

sudo apt-get --purge remove
sudo apt-get install

Próbuję następny krok:

root@localhost:/# mysqladmin -u root password MyNewPassword
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
root@localhost:/#

Ponieważ to również nie działa, wypróbowałem inne metody wymienione w sieci mysql:

Więc zabijam proces mysql, jak tam wskazano, a następnie używam

root@localhost:/# mysqld_safe --init-file=/home/me/mysql-init &
[1] 5267
root@localhost:/# 2017-02-01T12:47:49.250083Z mysqld_safe Logging to syslog.
2017-02-01T12:47:49.252427Z mysqld_safe Logging to '/var/log/mysql/error.log'.

2017-02-01T12:47:49.254765Z mysqld_safe Logging to '/var/log/mysql/error.log'.

2017-02-01T12:47:49.257045Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.

[1]+  Salida 1                mysqld_safe --init-file=/home/me/mysql-init
root@localhost:/#

Teraz wychodzę z opcji, więc wypróbowałem także inną metodę wymienioną tutaj w Ask Ubuntu:

root@localhost:/# sudo dpkg-reconfigure mysql-server-5.7
Checking if update is needed.
This installation of MySQL is already upgraded to 5.7.17, use --force if you still need to run mysql_upgrade
root@localhost:/#

A teraz naprawdę brakuje mi opcji, więc wszelkie sugestie są mile widziane.

Ilovelinux
źródło

Odpowiedzi:

16

Miałem ten sam problem i rozwiązałem go, wykonując następującą linię:

$ sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqld

przed wykonaniem tej linii:

root@localhost:/# mysqld_safe --init-file=/home/me/mysql-init &

Dla mnie te kroki działały lepiej.

Myślę, że jest na to czystszy sposób, ale dla mnie było to szybkie i skuteczne obejście.

odradek
źródło
1
dzięki, to
załatwiło sprawę
Zdarza się to na mysql 5.7. Po zatrzymaniu usługi mysql / var / run / mysqld zostanie usunięty i ponownie utworzony po ponownym uruchomieniu usługi.
Capy,
1

Nie mogłem zmusić mysql do ponownej instalacji bez względu na to, co próbowałem, w końcu musiałem po prostu spróbować zresetować hasło.

Musiałem iść tą drogą na Ubuntu 16.04.1 LTS. Spędziłem godzinę lub dłużej próbując wszystkich innych sugestii ze strony MySql do wszystkiego na SO, a także pytania i odpowiedzi AskUbuntu, w końcu udało mi się z tym pracować:

Uwaga: podczas gdy pokazywało Podaj hasło dla użytkownika root, nie miałem oryginalnego hasła, więc właśnie wprowadziłem to samo hasło, które będzie używane jako nowe hasło.

Uwaga: nie było /var/log/mysqld.log tylko /var/log/mysql/error.log

Należy również pamiętać, że to nie działało dla mnie:
sudo dpkg-reconfigure mysql-server-5.7

Nie działało też:
sudo dpkg-reconfigure --force mysql-server-5.5

Utwórz katalog usługi MySQL.
sudo mkdir /var/run/mysqld

Zezwól użytkownikowi MySQL na zapis w katalogu usługi.
sudo chown mysql: /var/run/mysqld

Następnie:

  1. zabij obecny mysqld pid
  2. uruchom mysqld z sudo / usr / sbin / mysqld &
  3. uruchom / usr / bin / mysql_secure_installation

    Wyjście z mysql_secure_installation

    root @ myServer: ~ # / usr / bin / mysql_secure_installation

    Zabezpieczanie wdrożenia serwera MySQL.

    Wpisz hasło dla użytkownika root:

    WERYFIKACJA WTYCZKI HASŁA można wykorzystać do testowania haseł i poprawy bezpieczeństwa. Sprawdza siłę hasła i pozwala użytkownikom ustawić tylko te hasła, które są wystarczająco bezpieczne. Czy chcesz skonfigurować wtyczkę VALIDATE PASSWORD?

    Naciśnij y | Y, aby wybrać Tak, dowolny inny klawisz Nie: nie Używanie istniejącego hasła do konta root. Zmienić hasło do roota? ((Naciśnij y | Y dla Tak, każdy inny klawisz dla Nie): y

    Nowe hasło:

    Wprowadź ponownie nowe hasło: domyślnie instalacja MySQL ma anonimowego użytkownika, co pozwala każdemu zalogować się do MySQL bez konieczności tworzenia dla niego konta użytkownika. Jest to przeznaczone wyłącznie do testowania i sprawienia, aby instalacja przebiegła nieco płynniej. Powinieneś je usunąć przed przejściem do środowiska produkcyjnego.

    Usunąć anonimowych użytkowników? (Naciśnij y | Y, aby wybrać Tak, dowolny inny klawisz, aby wybrać Nie): y Sukces.

    Zwykle root może łączyć się tylko z „localhost”. Dzięki temu nikt nie zgadnie hasła roota z sieci.

    Zezwolić na logowanie roota zdalnie? (Naciśnij y | Y, aby wybrać Tak, dowolny inny klawisz, aby wybrać Nie): y Sukces.

    Domyślnie MySQL zawiera bazę danych o nazwie „test”, do której każdy może uzyskać dostęp. Jest to również przeznaczone wyłącznie do testowania i powinno zostać usunięte przed przejściem do środowiska produkcyjnego.

    Usunąć testową bazę danych i uzyskać do niej dostęp? (Naciśnij y | Y, aby wybrać Tak, dowolny inny klawisz, aby wybrać Nie): y

    • Usuwanie testowej bazy danych ... Sukces.

    • Usuwanie uprawnień z testowej bazy danych ... Sukces.

    Ponowne załadowanie tabel uprawnień zapewni, że wszystkie dotychczasowe zmiany zaczną obowiązywać natychmiast.

    Przeładować tabele uprawnień teraz? (Naciśnij y | Y, aby wybrać Tak, dowolny inny klawisz, aby wybrać Nie): y Sukces.

    Wszystko gotowe!

JGlass
źródło
0

Miałem ten sam problem i rozwiązałem go za pomocą:

# /etc/init.d/mysql stop
# service mysql stop
# mkdir -p /var/run/mysqld
# chown mysql:mysql /var/run/mysqld
# mysqld_safe --skip-grant-tables &
# mysql -u root
mysql> use mysql;
mysql> update user set authentication_string=password('1234') where user='root';

(Tutaj authentication_stringznajduje się pole hasła).

Rajani
źródło