El modo de recuperación de XtraDB / InnoDB es un modo que se utiliza para recuperarse de situaciones de emergencia. La variable de sistema del servidor innodb_force_recovery establece el modo de recuperación. Un modo de 0 es un uso normal, mientras que cuanto mayor sea el modo, más estrictas serán las restricciones. Los modos superiores incorporan todas las limitaciones de los modos inferiores.

El modo de recuperación nunca debe establecerse en un valor que no sea cero, excepto en una situación de emergencia.

Generalmente, es mejor comenzar con un modo de recuperación de 1 y aumentar en incrementos individuales si es necesario. Con un modo de recuperación <4, solo se deben perder las páginas dañadas. Con 4, los índices secundarios podrían estar dañados. Con 5, los resultados podrían ser inconsistentes y los índices secundarios podrían estar dañados (incluso si no lo fueran con 4). Un valor de 6 deja las páginas en un estado obsoleto, lo que podría provocar más daños.

Para recuperar las tablas, puede ejecutar SELECTs para volcar datos, y DROP TABLE para eliminar tablas dañadas.

Están disponibles los siguientes modos:

Modos de recuperación

Modo Descripción
0 El modo predeterminado mientras XtraDB / InnoDB se ejecuta normalmente. Hasta MariaDB 10.2.7, era el único modo que permitía cambios en los datos. Desde MariaDB 10.2.7, las transacciones de escritura están permitidas con innodb_force_recovery <= 3.
1 (SRV_FORCE_IGNORE_CORRUPT) permite que el servidor siga funcionando incluso si se detectan páginas corruptas. Lo hace haciendo que la recuperación basada en rehacer registros ignore ciertos errores, como archivos de datos faltantes o páginas de datos dañadas. Se omitirá cualquier registro de rehacer de los archivos o páginas afectados. Puede facilitar el volcado de tablas haciendo que la instrucción SELECT * FROM table_name salte sobre índices y páginas corruptos.
2 (SRV_FORCE_NO_BACKGROUND) detiene la ejecución del subproceso maestro, evitando un bloqueo que se produce durante una purga. No se realizará ninguna purga, por lo que los registros de deshacer seguirán creciendo.
3 (SRV_FORCE_NO_TRX_UNDO) no revierte las transacciones después de la recuperación del bloqueo. No afecta la reversión de las transacciones actualmente activas. Empezando con MariaDB 10.2.7, también evitará que se ejecuten algunas tareas en segundo plano que generan deshacer. Estas tareas podrían tener una espera de bloqueo debido a las transacciones incompletas recuperadas cuya reversión se está evitando.
4 (SRV_FORCE_NO_IBUF_MERGE) no calcula las estadísticas de las tablas y evita que se inserten fusiones de búfer.
5 (SRV_FORCE_NO_UNDO_LOG_SCAN) trata las transacciones incompletas como comprometidas y no mira los registros de deshacer al comenzar.
6 (SRV_FORCE_NO_LOG_REDO) no realiza el avance del registro de rehacer como parte de la recuperación. Es probable que la ejecución de consultas que requieran índices falle con este modo activo. Sin embargo, si un volcado de tabla aún causa un bloqueo, puede intentar usar un SELECT * FROM tab ORDER BY primary_key DESC para volcar toda la porción de datos después de la parte dañada.

Tenga en cuenta también que XtraDB de forma predeterminada bloqueará el servidor cuando detecte datos corruptos en un espacio de tabla de una sola tabla. Este comportamiento se puede cambiar; consulte la variable de sistema innodb_corrupt_table_action.

Arreglar cosas

Intente establecer innodb_force_recovery en 1 e inicie mariadb. Si eso falla, pruebe con un valor de “2”. Si un valor de 2 funciona, entonces existe la posibilidad de que la única corrupción que haya experimentado esté dentro de los “registros de deshacer” innodb. Si eso hace que mariadb comience, debería poder volcar su base de datos con mysqldump. Puede verificar cualquier otro problema con cualquier tabla ejecutando “mysqlcheck –all -bases”.

Si pudo volcar con éxito sus bases de datos, o si anteriormente conocía buenas copias de seguridad, elimine su (s) base de datos (s) de mi línea de comando mariadb como “DROP yourdatabase”. Deja de mariadb. Vaya a / var / lib / mysql (o donde se encuentre su directorio de datos mysql) y “rm -i ib *”. Inicie mariadb, cree las bases de datos que soltó (CREAR su base de datos) y luego importe los volcados más recientes: “mysql

El contenido reproducido en este sitio es propiedad de sus respectivos dueños, y MariaDB no revisa este contenido con anticipación. Los puntos de vista, la información y las opiniones expresadas por este contenido no representan necesariamente las de MariaDB o de cualquier otra parte.