Sidebar

En el caso de presentarse una caída del servidor de MySQL, algunas tablas InnoDB posiblemente necesiten repararse. Normalmente es suficiente con levantar el servidor de base de datos ya que el engine InnoDB ejecuta un auto-recovery como parte del inicio. En raros casos el servidor de MySQL no levanta debido a un auto-recovery, pero si esto llegara a presentarse puede utilizar el siguiente procedimiento:

 

1. Reiniciar MySQL con la opción --innodb_force_recovery en un rango de 1 a 6.

Debajo se listan los valores mayores a cero permitidos para innodb_force_recovery. Un número mayor incluye todas las precauciones de los números por debajo. Si se logra iniciar la base de datos con un valor 4 como máximo, se puede estar relativamente seguro de que solamente se han perdido algunos datos en páginas individuales corruptas. Un valor de 6 es más dramático, porque las páginas de base de datos han quedado obsoletas, lo que a su vez puede introducir más corrupción en B-trees y otras estructuras de bases de datos.

Se recomienda iniciar con el valor 4.

1 (SRV_FORCE_IGNORE_CORRUPT)
Le permite al servidor ejecutarse aún si detecta una página corrupta; intenta hacer que SELECT * FROM tbl_name salte sobre los registros de índice y páginas corruptos, lo cual es de ayuda en el volcado de las tablas.

2 (SRV_FORCE_NO_BACKGROUND)
Impide que se ejecute el subproceso (thread) principal. Si durante la operación de descarga (purge) ocurriese una caida, esto la previene.

3 (SRV_FORCE_NO_TRX_UNDO)
No revierte transacciones luego de la recuperación.

4 (SRV_FORCE_NO_IBUF_MERGE)
También evita las operaciones de combinación del buffer de inserciones. Si ello pudiese causar una caida, es mejor no hacerlo; no calcula estadísticas de tablas.

5 (SRV_FORCE_NO_UNDO_LOG_SCAN)
No tiene en cuenta el contenido de los registros para revertir cambios (undo logs) al iniciar la base de datos: InnoDB considera como confirmadas inclusive a las transacciones incompletas.

6 (SRV_FORCE_NO_LOG_REDO)
Omite la creación del registro (log) que permite la recuperación de tipo roll-forward.

2. Cuando iniciamos el servidor con un valor en --innodb_force_recovery, levanta los tables space de InnoDB como readonly lo que hace posible que podamos realizar un dump de las tablas dañadas y eliminar las tablas. Posteriormente podemos levantar la base de datos eliminando la opción --innodb_force_recovery y recuperas las tablas de los dumps generados.

Si este procedimiento falla será necesario recuperar las tablas InnoDB de algún respaldo previo.


Tips BD