Impossible de démarrer mysql: InnoDB: mise à niveau après un crash non pris en charge


16

J'essaie d'exécuter MySQL à partir d'une installation Homebrew, mais il échoue toujours en essayant mysql.server start.

My se /usr/local/var/mysql/<name>.local.errlit comme tel et continue d'envoyer ce message d'erreur toutes les quelques secondes.

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

Réponses:


17

J'ai eu exactement les mêmes erreurs dans mon journal. Juste pour construire la réponse de Nipponese.

Supprimez toutes les versions de MySQL (j'avais 5.7.21, 5.7.22 et 8.0.11):

brew uninstall --force mysql

Confirmer le retrait et la réparation :

brew services list puis brew doctor

Renommez MySQL d'origine :

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

Installez la dernière version de MySQL (actuellement 8.0.11):

brew install mysql

Installation sécurisée MySQL :

/usr/local/bin/mysql_secure_installation

J'ai initialement reçu cette erreur: Error: Access denied for user 'dbadmin'@'localhost' (using password: YES)

J'utilise une configuration de niveau utilisateur. J'ai donc renommé .my.cnf et relancé l'installation sécurisée.

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

Sur les invites d'installation, j'entre les options suivantes Y, 0, Y, N, N, Y, Y.

Mettre à niveau MySQL Workbench Après cela, je ne pouvais toujours pas me connecter à MySQL Workbench (GA 6.3.10), bien qu'il semblait enfin démarrer MySQL. J'obtenais l'invite d'erreur suivante.

"Le plug-in d'authentification 'caching_sha2_password' ne peut pas être chargé: dlopen (/usr/local/mysql/lib/plugin/caching_sha2_password.so, 2): image introuvable"

Pour résoudre ce problème, j'ai téléchargé MySQL Workbench 8.0.11 rc (la version de développement). J'ai utilisé l'interface graphique pour ajouter les utilisateurs que j'avais avant d'adhérer aux nouvelles règles de mot de passe. J'ai mis à jour et renommé ~ / .my.cnf avec le mot de passe plus sécurisé. Puis restauré mes bases de données.

À ce stade, j'ai pu me connecter à Workbench en utilisant root et le nouveau mot de passe que j'ai configuré lors de l'installation sécurisée.

Nettoyer (supprimer le répertoire renommé et son contenu):

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


1
C'était clairement déjà répondu par l'affiche originale hier.
JakeGould

4
Peut-être était-il déjà répondu par lui-même, mais pas avec des détails aussi essentiels pour ceux d'entre nous qui recherchent les étapes exactes nécessaires.
Sturm

Quel est le but de renommer /usr/local/var/mysqlplutôt que de simplement le supprimer au départ? old.mysqln'est utilisé nulle part sauf pendant l'étape de nettoyage. Je demande car il serait utile de réinstaller MySQL tout en préservant les bases de données.
user2763030

La raison pour laquelle je l'ai fait était juste au cas où je voudrais des données plus tard. Toutes mes bases de données locales étaient / sont des clones de notre environnement de production, je n'ai donc rien sauvegardé et j'ai tout synchronisé après le processus de mise à niveau. Je pense que vous pouvez utiliser les bases de données des versions précédentes bien que mysql 8 ait mis à jour les règles de cryptage des mots de passe. Je sais que vous pouvez ajouter une ligne à votre .my.cnf pour utiliser l'ancienne méthode d'auth au lieu de sha2. Désolé, je ne suis pas très bien informé sur cette partie. J'espère que ça aide.
Hunter

Si vous obtenez Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)en cours d'exécution /usr/local/bin/mysql_secure_installation, vous devrez peut-être simplement démarrer le serveur MySql comme je l'ai fait. Vous pouvez le faire en exécutant "mysql.server start".
Richie Thomas

12

tldr; Une nouvelle version de mysql a été installée via Homebrew. Revenez à la version précédemment installée.

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

L'histoire complète est que vous avez probablement installé une version plus récente de mysql avec brew upgrade. Vérifiez la sortie de brew info mysql. Vous pouvez voir plus d'une version.

Dans mon cas, j'ai vu les deux éléments suivants:

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

J'ai vérifié mysql --versionet le plus récent 8.0.11 fonctionnait.

Homebrew inclut la switchcommande qui vous permet de faire exactement cela entre les services.

Exécutez ceci en remplaçant la version par la vôtre:

brew switch mysql 5.7.17

Redémarrez mysql:

brew services restart mysql

Tout devrait être de retour en état de marche.


1
En quoi cette fin diffère-t-elle de la réponse déjà auto-répondue et acceptée ?
JakeGould

4
@JakeGould Answer 167207 vous suggère de supprimer tout le contenu de votre base de données. Ma réponse suggère d'utiliser brew switchce qui ne fonctionne pas.
johnsampson

C'est suffisant. Bon conseil. +1
JakeGould

1
Bonne réponse. A travaillé pour moi
Kuppuraj

1
Dommage que je ne l'ai pas trouvé avant d'avoir désinstallé toutes les versions de mysql. FML
andrewtweber

3

Il semble que le problème provienne d'une installation précédente dans /usr/local/var/mysql.

Après la désinstallation via homebrew, la suppression /usr/local/var/mysql, l'exécution brew doctoret la réinstallation via homebrew, le problème a disparu.


La suppression /usr/local/var/mysqlsupprimera-t-elle tout le contenu de votre base de données?
Nicodemuz

@Nicodemuz yup.
nipponese

6
vous devriez probablement souligner cela comme un avertissement!
Nicodemuz
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.