Si hay corrupción de página de base de datos, es posible que se desee
hacer un volcado de tablas desde la base de datos con SELECT
INTO OUTFILE; usualmente, la mayoría de los datos obtenidos de
esta manera están intactos. Aún así, la corrupción puede hacer que
SELECT * FROM o
las operaciones en segundo plano de tbl_nameInnoDB caigan o,
incluso activar la recuperación roll-forward de
InnoDB. Sin embargo, se puede forzar el motor de
almacenamiento de InnoDB para que se inicie mientras se
evitan las operaciones en segundo plano, de forma que se pueda realizar
un volcado de las tablas. Por ejemplo, puede agregarse la siguiente
linea a la sección [mysqld] del fichero de opciones
antes de reiniciar el servidor:
[mysqld] innodb_force_recovery = 4
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 hacer un volcado
de tablas con un valor de a lo sumo 4, 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.
1
(SRV_FORCE_IGNORE_CORRUPT)
Le permite al servidor ejecutarse aún si detecta una página
corrupta; intenta hacer que SELECT * FROM
salte sobre los
registros de índice y páginas corruptos, lo cual es de ayuda en el
volcado de las tablas.
tbl_name
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.
En otro caso la base de datos no debe emplearse con ninguna de
estas opciones habilitadas. Como una medida de seguridad,
InnoDB impide que los usuarios lleven a cabo
operaciones INSERT, UPDATE, o
DELETE cuando
innodb_force_recovery está configurado en un valor
mayor a 0.
Se pueden ejecutar sentencias DROP y
CREATE para eliminar y crear tablas incluso cuando se
está empleando la recuperación forzada. Si se sabe que una determinada
tabla está provocando caídas al hacer una cancelación (rollback), se la
puede eliminar. También puede utilizarse para detener una cancelación
fuera de control causada por una importación o un ALTER
TABLE en masa. Se puede interrumpir el proceso
mysqld y establecer
innodb_force_recovery a un valor de
3 para poner a funcionar la base de datos sin que
ejecute cancelación (rollback), luego emplear DROP
para eliminar la tabla que está causando la cancelación fuera de
control.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.
