Motor de almacenamiento desconocido / no compatible: InnoDB | MySQL Ubuntu

45

Recientemente actualicé desde el anterior LTS Ubuntu a Precise y ahora mysql se niega a comenzar. Se queja de lo siguiente cuando intento iniciarlo:

╰$ sudo service mysql restart
stop: Unknown instance:
start: Job failed to start

Y esto se muestra en "/var/log/mysql/error.log":

120415 23:01:09 [Note] Plugin 'InnoDB' is disabled.
120415 23:01:09 [Note] Plugin 'FEDERATED' is disabled.
120415 23:01:09 [ERROR] Unknown/unsupported storage engine: InnoDB
120415 23:01:09 [ERROR] Aborting

120415 23:01:09 [Note] /usr/sbin/mysqld: Shutdown complete

Verifiqué los permisos en todos los directorios de mysql para asegurarme de que tuviera la propiedad y también cambié el nombre de los ib_logs previos para poder rehacerlos. No estoy llegando a ningún lado con este problema en este momento, después de mirar los resultados de Google durante 2 horas.

Garrett
fuente
Por cierto, logré ejecutar mysql al comentar la entrada "skip_innodb" en my.cnf. Pero estoy bastante seguro de que no debía resolver esto de esa manera.
Garrett
Muestre todas las variables de my.cnf que son configuraciones innodb
RolandoMySQLDBA

Respuestas:

34

Después de verificar los registros, encontré el siguiente error:

[ERROR] Unknown/unsupported storage engine: InnoDB

Eliminé estos archivos:

rm /var/lib/mysql/ib_logfile0
rm /var/lib/mysql/ib_logfile1 

a /var/lib/mysql

Esto resolvió mi problema después de reiniciar.

Vinay
fuente
77
el rmcomando se usa para eliminar archivos en lugar de cambiarles el nombre hasta donde yo sé ...
Itai Ganot
2
Esos archivos contienen los datos reales de su base de datos. No quieres eliminarlos.
Stefan Lasiewski
No, el ibdataarchivo contiene los datos (a menos que tenga un archivo por tabla). Los archivos ib_logfile son los registros de reproducción que contienen los datos de las transacciones que alteran la base de datos que pueden haber estado en proceso cuando / si la base de datos se bloqueó. Si pudo apagar el servidor con éxito, eliminar estos archivos de registro no le hará daño. Si se estrelló, entonces los necesitas. Pero esta es una respuesta válida. Si su archivo my.cnf cambia la opción innodb_log_file_size y ya no coincide con esos dos archivos, recibirá el mensaje de error que indica el OP. Eliminar / mover para que se puedan hacer nuevos lo arregla.
Safado
2
La razón por la cual solo se pueden hacer ediciones durante 5 minutos es algo que no puedo entender ... Debería haber dicho que es una posible solución para el error mencionado anteriormente. Como lo indicó el OP, no era la solución que necesitaba.
Safado
1
Siempre puede cambiarles el nombre, por ejemplo mv ib_logfile0 ib_logfile0.bak && mv ib_logfile1 ib_logfile1.bak.
kenorb
23

Si realmente lo necesita skip-innodb(caso de uso: huella de memoria baja), entonces, por supuesto, no tiene que comentarlo. Sin embargo, si InnoDB es el motor de almacenamiento predeterminado, el servidor no se iniciará hasta que usted le indique qué motor de almacenamiento debe utilizar, por ejemplo, default-storage-engine=myisampara MyISAM.

Entonces, prueba esto:

$ sudo -u mysql mysqld --skip-innodb --default-storage-engine=myisam
Andy Mikhaylenko
fuente
66
Intente agregar "default-storage-engine = myisam" a /etc/mysql/my.cnf en la sección [mysqld] si desea tener "skip_innodb".
Pincoded
Funciona muy bien ¡Aclamaciones!
Boann
44
¿Qué pasa si quieres innodb-support?
Nilzor
1
Mariadb en Centos 7 agregado default-storage-engine=myisamen el archivo /etc/my.cnf debajo [mysqld]. Eso hizo el truco. Thx
Damodar Bashyal
12

Si está utilizando MySQL 5.6+ y desea deshabilitar InnoDB, no olvide " --default-tmp-storage " o no funcionará:

Para deshabilitar InnoDB, use --innodb = OFF o --skip-innodb. En este caso, debido a que el motor de almacenamiento predeterminado es InnoDB, el servidor no se iniciará a menos que también use --default-storage-engine y --default-tmp-storage-engine para establecer el valor predeterminado en algún otro motor para ambos, permanente y Tablas TEMPORALES.

http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#option_mysqld_ignore-builtin-innodb

Puede agregar esto a su my.cnf:

[mysqld] 
innodb=OFF 
ignore-builtin-innodb 
skip-innodb
default-storage-engine=myisam 
default-tmp-storage-engine=myisam

solo para asegurarme de que funcione.

Juan
fuente
+1, nunca se da cuenta del documento oficial. debería establecer default-storage-enginey default-tmp-storage-engine, gracias.
Giberno
7

Verifique su registro de errores de mysql.

tail -100 /var/log/mysql/error.log

Si su registro dice (como lo hizo el mío):

InnoDB: Inicializando agrupación de almacenamiento intermedio, tamaño = 128.0M
InnoDB: mmap (137363456 bytes) falló; errno 12
[ERROR] InnoDB: no se puede asignar memoria para el grupo de búferes

No tiene suficiente memoria para usar el tamaño de búfer predeterminado de 128M

Edite el archivo de configuración /etc/mysql/my.cnf agregando una línea para especificar un innodb_buffer_pool_size más pequeño.

# make the buffer pool smaller than 128M since we only have 1 GB of total RAM
innodb_buffer_pool_size = 16M

Guarde el archivo de configuración e inicie mysql

sudo service mysql start
usuario2219975
fuente
Es perfecto aquí. Pero también podrían ser procesos colgantes del servidor web o algo que se está comiendo la RAM, verifique eso también.
SJAS
0

Prueba 2 cosas más. 1. Reduzca el tamaño de la agrupación de almacenamiento intermedio innodb. 2. Edite el script inicial de mysql y agregue la opción --innodb.

También me pregunto si su paquete tiene errores. ¿Podrías probar una versión menor diferente?

Además, supongo que su servidor mysql también se actualizó. Tal vez esa versión está rota? Preciso aún no es definitivo.

johnshen64
fuente
Ya lo hice, sin ningún efecto.
Garrett
Lo sentimos, lo edité con algunas cosas para probar, más como un paquete defectuoso. Intente utilizar la versión mysql.com o percona, que suelen ser más estables.
johnshen64
También asegúrese de que el paquete anterior esté completamente purgado cuando se instale el nuevo.
johnshen64
¿Purgar completamente el paquete daría como resultado la pérdida de información de la base de datos?
Garrett
No debería, pero para estar seguro siempre debe hacer una copia de seguridad de su DBS.
johnshen64
0

Recibí este error cuando eliminé la ubicación que uso tmpdir. Si ha cambiado recientemente tmpdir, es posible que desee verificar que sea una ubicación válida y que se pueda escribir.

Jeff
fuente