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_name
InnoDB
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.