Reparar tabla corrupta en MySQL

Hace ya tiempo atrás luego de un fallo en uno de mis servidores de monitoreo tuve problemas con la base de datos de la herramienta Cacti que estaba montada en MySQL, donde el fallo indicaba a la tabla poller_item como el orígen del problema.

Con dicha información en las manos me puse a buscar como solucionar el inconveniente y el resultado es el que veremos en la siguiente entrada.

Pero antes una pequeña aclaración.
ATENCIÓN: El autor no se hace responsable de daños, pérdidas de información o fallos en la integridad de la base de datos que puedan surgir a consecuencia de la ejecución de los comandos especificados en éste artículo!
Hecha la aclaración correspondiente procedemos a detallar los pasos a seguir.


Pasos seguidos

  1. Antes que nada debemos conectarnos al motor de base de datos MySQL con su usuario root de la siguiente forma:
    testsrv:~ # mysql -u root -p
    Enter password:
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 392
    Server version: 5.1.46-log SUSE MySQL RPM
    
    Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
    This software comes with ABSOLUTELY NO WARRANTY. This is free software,
    and you are welcome to modify and redistribute it under the GPL v2 license
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql>
    
  2. Luego especificamos con que base de datos vamos a trabajar, en este ejemplo la base de datos se denominaba cacti.
    mysql> use cacti
    Database changed
    
    mysql>
    
  3. Para obtener más información acerca del daño que había sufrido la tabla poller_item se ejecutó el comando check table que arrojó la siguiente información:
    mysql> check table poller_item;
    +-------------------+-------+----------+------------------------------------------------------------------+
    | Table             | Op    | Msg_type | Msg_text                                                         |
    +-------------------+-------+----------+------------------------------------------------------------------+
    | cacti.poller_item | check | warning  | Table is marked as crashed                                       |
    | cacti.poller_item | check | warning  | 6 clients are using or haven't closed the table properly         |
    | cacti.poller_item | check | warning  | Found 444 deleted space in delete link chain. Should be 1256     |
    | cacti.poller_item | check | error    | Found 14 deleted rows in delete link chain. Should be 4294967293 |
    | cacti.poller_item | check | error    | record delete-link-chain corrupted                               |
    | cacti.poller_item | check | error    | Corrupt                                                          |
    +-------------------+-------+----------+------------------------------------------------------------------+
    6 rows in set (0.02 sec)
    
    mysql>
    
  4. Para reparar la tabla poller_item se ha utilizado el comando repair table de MySQL. Si bien el comando reparó el daño en la tabla, también provocó la pérdida de información (1 registro) que en ciertos casos puede tener efectos contrarios en la integridad de los datos.
    mysql> repair table poller_item;
    +-------------------+--------+----------+--------------------------------------+
    | Table             | Op     | Msg_type | Msg_text                             |
    +-------------------+--------+----------+--------------------------------------+
    | cacti.poller_item | repair | warning  | Number of rows changed from 88 to 87 |
    | cacti.poller_item | repair | status   | OK                                   |
    +-------------------+--------+----------+--------------------------------------+
    2 rows in set (0.06 sec)
    
    mysql>
    
  5. Realizada la reparación ya solo nos resta salir de la herramienta de MySQL de la siguiente forma:
    mysql> exit
    Bye
    testsrv:~ #
    
Y eso es todo, tengan en cuenta que en el ejemplo anterior al reparar la tabla se perdió un registro, esto puede ocasionar graves problemas en la integridad de la información, por lo cual siempre es recomendable realizar periódicamente copias de seguridad de nuestra base de datos para tener los respaldos correspondientes.


Fuentes:

Comentarios

  1. Me gusta usar con MySQL en linux - herramienta gratuita de Valentina Studio, hace todo lo que necesito, y lo hace muy bien http://www.valentina-db.com/en/valentina-studio-overview

    ResponderEliminar

Publicar un comentario

Entradas populares