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

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


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.


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ął.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.