Anuncios

Bienvenidos sean a este post, hoy veremos como reparar las tablas.

Anuncios

En los posts anteriores mencionamos que una de las posibilidades que nos brinda utilizar backups es reparar tablas dañadas pero esto no es estrictamente asi, aunque tambien podemos intentar repararla dado que los motores tienen la posibilidad de hacerlo pero cada motor tiene su procedimiento.

Anuncios

InnoDB tiene un proceso de recuperacion que es lanzado cuando se inicia el servidor, si bien este proceso es automatico debe ser configurado por el DBA, MyIsam y Aria tambien poseen procesos automatico al inicio pero tambien soportan la recuperacion via REPAIR TABLE o cuando el servidor esta detenido se puede usar herramientas especificas de mariadb, por ultimo el resto de los motores tambien soportan REPAIR TABLE.

Anuncios

Hablemos sobre como trabaja la recuperacion en InnoDB, si bien este motor no necesita ser reparado podemos usar la opcion INTO OUTFILE para generar un archivo con los datos correctos sin importar que este dañada la tabla, si bien el motor generar un backup que se puede usar para restaurarlo despues pero en ciertos casos de corrupcion SELECT puede «crashear» a InnoDB, para estos casos debemos reparar las tablas o restaurar el backup mas reciente, veamos el primero caso.

Anuncios

Chequeando tablas

Anuncios

InnoDB soporta la instruccion CHECK TABLE, donde si una tabla esta corrupta devuelve un conjunto de resultados cuyo ultimo valor es de error para la columna Msg_Type y un valor Corrupt para la columna Msg_Text, en este caso la tabla dañada o indice son marcada como corrupta y no sera usada hasta que sea arreglada, esta instruccion cuando detecta ciertos tipos de corrupcion detiene al servidor para evitar que este inconveniente se propague mas.

Anuncios

Logs de transaccion

InnoDB posee dos logs para las transacciones:

  • redo log, se usa para repetir transacciones
  • undo log, cancelar transacciones no ejecutadas
Anuncios
Anuncios

Estas se utilizan para recuperarnos de algun inconveniente con las mismas, el log redo antes de comenzar la modificacion de las tablas graba todas los registros necesarios, ahora si nuestro servidor se daña antes de realizar las modificaciones aun podremos realizar las transacciones almacenadas en el log en el reinicio del equipo, este log se almacena fisicamente en archivos dedicados y gracias a un buffer permite a InnoDB a reducir de forma segura la escritura en estos archivos hasta que una transaccion sea finalizada, el undo log en esta almacenado en espacio de tablas del sistema y de manera opcional en otros espacios de tablas.

Anuncios

Forzando la recuperacion de datos

Anuncios

Si bien dijimos que si el servidor detecta una corrupcion de datos este no ejecutara automaticamente la recuperacion de datos, salvo que el valor de la variable @@innodb_force_recovery sea mayor a 0, esta variable no es dinamica por lo tanto debemos usar la opcion –innodb_force_recovery al inicio o la variable innodb_force_recovery en el archivo de configuraciones, solo valores mayores que 0 se deben usar para la recuperacion, despues de una recuperacion exitosa debemos volver a establecer con el valor de 0 a @@innodb_force_recovery y reiniciarlo.

Anuncios

El valor determina que acciones va a tomar InnoDB para ejecutar la recuperacion, cada valor incluye las acciones tomadas con los valores bajos, a su vez estos valores pueden tener algunos inconvenientes:

  • 1 al 3, se consideran valores bajos y son los recomendados para usar
  • 4, puede corromper los indices secundarios pero pueden arreglarse luego
  • 5, puede causar resultados inconsistentes
  • 6, puede causar que las paginas queden en estados obsoletos
Anuncios

Los valores que estan mas alla del 3 solo deben usarse en caso de que los anteriores hayan fallado, con valores mayores a 3 InnoDB rechaza instrucciones DML que intenten modificar los datos y en el caso del valor 6 rechaza a CREATE TABLE y DROP TABLE, veamos que hace cada valor de @@innodb_force_recovery mediante la siguiente tabla:

ValorDescripcion
0Ejecucion normal (sin recuperacion)
1Intenta simplemente esquivar las paginas corruptas
2No inicia al thread principal y purga todos los threads
3Evita la vuelta atras de las transacciones
4El buffer de cambio no unira paginas
5Ignora el log de undo
6Ignora el log de redo
Anuncios

En resumen, hoy hemos visto como reparar tablas de InnoDB, como es, las herramientas que disponemos, como chequear una tabla, como forzar la autorepacion y una descripcion de que hace cada opcion, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50

Anuncio publicitario