No se puede iniciar mysql: InnoDB: la actualización después de un bloqueo no es compatible

16

Estoy tratando de ejecutar MySQL desde una instalación de Homebrew, pero sigue fallando cuando lo intento mysql.server start.

Mi /usr/local/var/mysql/<name>.local.errlee así, y sigue enviando este mensaje de error cada pocos segundos.

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
japonés
fuente

Respuestas:

17

Tuve exactamente los mismos errores en mi registro. Solo para construir a partir de la respuesta de los nipones.

Eliminar todas las versiones de MySQL (tenía 5.7.21, 5.7.22 y 8.0.11):

brew uninstall --force mysql

Confirmar eliminación y reparación :

brew services list y entonces brew doctor

Renombrar MySQL original :

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

Instale la última versión de MySQL (actualmente 8.0.11):

brew install mysql

Instalación segura de MySQL :

/usr/local/bin/mysql_secure_installation

Inicialmente recibí este error: Error: Access denied for user 'dbadmin'@'localhost' (using password: YES)

Estoy usando una configuración de nivel de usuario. Así que cambié el nombre de .my.cnf y volví a ejecutar la instalación segura.

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

En las indicaciones de instalación, ingreso las siguientes opciones Y, 0, Y, N, N, Y, Y.

Actualizar MySQL Workbench Después de eso, todavía no pude conectarme con MySQL Workbench (GA 6.3.10) aunque finalmente parecía que estaba iniciando MySQL. Estaba recibiendo el siguiente mensaje de error.

"No se puede cargar el complemento de autenticación 'caching_sha2_password': dlopen (/usr/local/mysql/lib/plugin/caching_sha2_password.so, 2): imagen no encontrada"

Para resolver esto, descargué MySQL Workbench 8.0.11 rc (la versión de lanzamiento de desarrollo). Utilicé la GUI para agregar los usuarios que tenía antes de cumplir con las nuevas reglas de contraseña. Actualicé y cambié el nombre de ~ / .my.cnf con la contraseña más segura. Luego restauró mis bases de datos.

En este punto pude conectarme con workbench usando root y la nueva contraseña que configuré durante la instalación segura.

Limpieza (eliminar el directorio renombrado y su contenido):

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

Cazador
fuente
1
Esto claramente ya fue respondido por el póster original ayer.
JakeGould
44
Tal vez ya fue respondido por uno mismo, pero no con detalles tan esenciales para aquellos de nosotros que buscamos los pasos exactos necesarios.
Sturm
¿Cuál es el propósito de renombrar en /usr/local/var/mysqllugar de simplemente eliminarlo desde el principio? old.mysqlno se usa en ninguna parte excepto durante el paso de limpieza. Pregunto porque sería útil reinstalar MySQL mientras se preservan las bases de datos.
user2763030
La razón por la que lo hice fue en caso de que quisiera alguno de los datos más tarde. Todas mis bases de datos locales eran / son clones de nuestro entorno de producción, por lo que no hice copias de seguridad de nada y solo las sincronicé después del proceso de actualización. Creo que podría usar las bases de datos de versiones anteriores, aunque mysql 8 ha actualizado las reglas de cifrado para las contraseñas. Sé que puede agregar una línea a su .my.cnf para usar el método de autenticación anterior en lugar de sha2. Lo siento, no soy muy eficiente en esa parte. Espero que esto ayude.
Hunter
Si obtiene Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)durante la ejecución /usr/local/bin/mysql_secure_installation, es posible que deba simplemente iniciar el servidor MySql como lo hice yo. Puede hacer esto ejecutando "mysql.server start".
Richie Thomas
12

tldr; Se instaló una nueva versión de mysql a través de Homebrew. Vuelva a la versión instalada previamente.

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

La historia completa es que probablemente instaló una versión más nueva de mysql con brew upgrade. Revise la salida de brew info mysql. Puede ver más de una versión.

En mi caso, vi lo siguiente:

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

Lo comprobé mysql --versiony el nuevo 8.0.11 se estaba ejecutando.

Homebrew incluye el switchcomando que le permite hacer exactamente eso entre servicios.

Ejecute esto reemplazando la versión con la suya propia:

brew switch mysql 5.7.17

Reinicie mysql:

brew services restart mysql

Todo debe estar de vuelta en buen estado de funcionamiento.

johnsampson
fuente
1
¿Cómo difiere esto en el propósito final de la respuesta ya auto-contestada y aceptada ?
JakeGould
44
@JakeGould Answer 167207 sugiere que elimine todo el contenido de su base de datos. Mi respuesta sugiere usar brew switchcuál no.
johnsampson
Lo suficientemente justo. Buen consejo. +1
JakeGould
1
Buena respuesta. Trabajó para mí
Kuppuraj
1
Lástima que no encontré esto antes de desinstalar todas las versiones de mysql. FML
andrewtweber
3

Parece que el problema fue una instalación previa en /usr/local/var/mysql.

Después de desinstalar a través de homebrew, eliminar /usr/local/var/mysql, ejecutar brew doctory volver a instalar a través de homebrew, el problema desapareció.

japonés
fuente
¿ /usr/local/var/mysqlEliminar eliminará todo el contenido de su base de datos?
Nicodemuz
@Nicodemuz sí.
nipponese
66
¡probablemente deberías resaltar eso como una advertencia!
Nicodemuz