Nie można uruchomić mysql: InnoDB: Aktualizacja po awarii nie jest obsługiwana

16

Próbuję uruchomić MySQL z instalacji Homebrew, ale ciągle zawodzi podczas próby mysql.server start.

Mój /usr/local/var/mysql/<name>.local.errtak czyta i wysyła ten komunikat o błędzie co kilka sekund.

2018-06-20T20:38:54.6NZ mysqld_safe Logging to '/usr/local/var/mysql/<computer name>.local.err'.
2018-06-20T20:38:54.6NZ mysqld_safe Starting mysqld daemon with databases from /usr/local/var/mysql
2018-06-20T20:38:54.379228Z 0 [System] [MY-010116] [Server] /usr/local/opt/mysql/bin/mysqld (mysqld 8.0.11) starting as process 6271
2018-06-20T20:38:54.383128Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /usr/local/var/mysql/ is case insensitive
2018-06-20T20:38:54.449869Z 1 [ERROR] [MY-012526] [InnoDB] InnoDB: Upgrade after a crash is not supported. This redo log was created with MySQL 5.7.20. Please follow the instructions at http://dev.mysql.com/doc/refman/8.0/en/upgrading.html
2018-06-20T20:38:54.449947Z 1 [ERROR] [MY-012930] [InnoDB] InnoDB: Plugin initialization aborted with error Generic error.
2018-06-20T20:38:54.919197Z 1 [ERROR] [MY-011013] [Server] Failed to initialize DD Storage Engine.
2018-06-20T20:38:54.919769Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2018-06-20T20:38:54.919814Z 0 [ERROR] [MY-010119] [Server] Aborting
2018-06-20T20:38:54.920978Z 0 [System] [MY-010910] [Server] /usr/local/opt/mysql/bin/mysqld: Shutdown complete (mysqld 8.0.11)  Homebrew.
2018-06-20T20:38:54.6NZ mysqld_safe mysqld from pid file /usr/local/var/mysql/bae.local.pid ended
Japończyk
źródło

Odpowiedzi:

17

W dzienniku miałem dokładnie takie same błędy. Wystarczy zbudować odpowiedź Nipponese.

Usuń wszystkie wersje MySQL (miałem 5.7.21, 5.7.22 i 8.0.11):

brew uninstall --force mysql

Potwierdź usunięcie i naprawę :

brew services list i wtedy brew doctor

Zmień nazwę oryginalnego MySQL :

mv /usr/local/var/mysql /usr/local/var/old.mysql

Zainstaluj najnowszą wersję MySQL (obecnie 8.0.11):

brew install mysql

Bezpieczna instalacja MySQL :

/usr/local/bin/mysql_secure_installation

Początkowo otrzymałem ten błąd: Error: Access denied for user 'dbadmin'@'localhost' (using password: YES)

Używam konfiguracji na poziomie użytkownika. Więc przemianowany .my.cnf i pobiegł bezpieczny zainstalować ponownie.

mv /Users/[your username]/.my.cnf /Users/[your username]/old.my.cnf /usr/local/bin/mysql_secure_installation

W monitach instalacyjnych wprowadzam następujące opcje Y, 0, Y, N, N, Y, Y.

Uaktualnij MySQL Workbench Po tym nadal nie mogłem połączyć się z MySQL Workbench (GA 6.3.10), chociaż wydawało się, że w końcu zaczyna MySQL. Otrzymałem następujący komunikat o błędzie.

„Nie można załadować wtyczki uwierzytelniającej„ caching_sha2_password ”: dlopen (/usr/local/mysql/lib/plugin/caching_sha2_password.so, 2): nie znaleziono obrazu”

Aby rozwiązać ten problem, pobrałem MySQL Workbench 8.0.11 rc (wersja rozwojowa). Użyłem GUI, aby dodać użytkowników, których miałem przed zastosowaniem nowych reguł dotyczących haseł. Zaktualizowałem ~ i .my.cnf i zmieniłem nazwę na bardziej bezpieczne hasło. Następnie przywróciłem moje bazy danych.

W tym momencie mogłem połączyć się ze środowiskiem roboczym przy użyciu roota i nowego hasła, które ustawiłem podczas bezpiecznej instalacji.

Oczyść (usuń katalog o zmienionej nazwie i jego zawartość):

rm -r /usr/local/var/old.mysql

Łowca
źródło
1
Na to wczoraj wyraźnie odpowiedział sam autor.
JakeGould
4
Być może została już udzielona odpowiedź, ale nie z tak istotnymi szczegółami dla tych z nas, którzy szukają dokładnie niezbędnych kroków.
Sturm
Jaki jest cel zmiany nazwy, /usr/local/var/mysqla nie po prostu usunięcie jej na początku? old.mysqlnie jest nigdzie używany, z wyjątkiem etapu czyszczenia. Pytam, ponieważ pomocna byłaby ponowna instalacja MySQL przy zachowaniu baz danych.
user2763030,
Powodem, dla którego to zrobiłem, był przypadek, gdybym chciał później uzyskać jakiekolwiek dane. Wszystkie moje lokalne bazy danych były / są klonami naszego środowiska produkcyjnego, więc nie wykonałem kopii zapasowej i po prostu zsynchronizowałem to wszystko po procesie aktualizacji. Wierzę, że możesz użyć baz danych z poprzednich wersji, chociaż mysql 8 zaktualizował reguły szyfrowania haseł. Wiem, że możesz dodać wiersz do pliku .my.cnf, aby użyć starszej metody uwierzytelniania zamiast sha2. Przepraszam, nie jestem super kompetentny w tej kwestii. Mam nadzieję, że to pomoże.
Hunter,
Jeśli dostaniesz Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)podczas działania /usr/local/bin/mysql_secure_installation, być może będziesz musiał po prostu uruchomić serwer MySql, tak jak ja. Możesz to zrobić, uruchamiając polecenie „mysql.server start”.
Richie Thomas,
12

tldr; Nowa wersja mysql została zainstalowana przez Homebrew. Przywróć poprzednio zainstalowaną wersję.

brew switch mysql X.X.XX` and `brew services restart mysql 

Cała historia polega na tym, że prawdopodobnie zainstalowałeś nowszą wersję mysql brew upgrade. Przejrzyj dane wyjściowe brew info mysql. Możesz zobaczyć więcej niż jedną wersję.

W moim przypadku widziałem oba następujące elementy:

/usr/local/Cellar/mysql/5.7.17
/usr/local/Cellar/mysql/8.0.11

Sprawdziłem mysql --versioni działała nowsza wersja 8.0.11.

Homebrew zawiera switchpolecenie, które pozwala robić to tylko między usługami.

Wykonaj to, zastępując wersję własną:

brew switch mysql 5.7.17

Uruchom ponownie mysql:

brew services restart mysql

Wszystko powinno wrócić do pracy.

johnsampson
źródło
1
Czym różni się to celem końcowym od już udzielonej odpowiedzi i odpowiedzi ?
JakeGould
4
@JakeGould Odpowiedź 167207 sugeruje całą zawartość bazy danych zostanie usunięty. Moja odpowiedź sugeruje użycie, brew switchktóre nie.
johnsampson
Słusznie. Dobra rada. +1
JakeGould
1
Dobra odpowiedź. Pracował dla mnie
Kuppuraj,
1
Szkoda, że ​​nie znalazłem tego przed odinstalowaniem każdej wersji mysql. FML
andrewtweber
2

Wygląda na to, że problemem była poprzednia instalacja /usr/local/var/mysql.

Po odinstalowaniu przez homebrew, usunięciu /usr/local/var/mysql, uruchomieniu brew doctori ponownej instalacji przez homebrew problem zniknął.

Japończyk
źródło
Czy usunięcie spowoduje /usr/local/var/mysqlusunięcie całej zawartości bazy danych?
Nikodemuz
@Nicodemuz yup.
nipponese
7
powinieneś chyba to podkreślić jako ostrzeżenie!
Nikodemuz