Cómo reparar tablas dañadas en MySQL

0 acciones
0
0
0
0

Introducción

A veces, las tablas MySQL pueden corromperse, lo que significa que se ha producido un error y no se pueden leer los datos almacenados en ellas. Intentar leer una tabla dañada suele provocar el bloqueo del servidor.

Algunas razones comunes de corrupción de tablas incluyen:

  • El servidor MySQL se detiene en medio de una escritura.
  • Una aplicación externa modifica una tabla que está siendo modificada simultáneamente por el servidor.
  • El dispositivo se apaga inesperadamente.
  • El hardware de la computadora falla.
  • Hay un error de software en algún lugar del código MySQL.

Si sospecha que una de sus tablas está dañada, debería hacer una copia de seguridad de su lista de datos antes de intentar solucionar problemas o repararla. Esto ayuda a reducir el riesgo de pérdida de datos.

Primero, detenga el servicio MySQL:

sudo systemctl stop mysql

Luego, copie todos sus datos a una nueva carpeta de respaldo. En sistemas Ubuntu, el directorio de datos predeterminado es /var/lib/mysql/:

cp -r /var/lib/mysql /var/lib/mysql_bkp

Una vez que tenga la copia de seguridad, podrá comprobar si la tabla está realmente dañada. Si la tabla utiliza el motor de almacenamiento MyISAM, puede comprobar si hay daños reiniciando MySQL y ejecutando la instrucción CHECK TABLE desde el símbolo del sistema de MySQL:

sudo systemctl start mysql
CHECK TABLE table_name;

Aparecerá un mensaje en la salida de esta instrucción para informarle si está dañada. Si la tabla MyISAM está dañada, generalmente se puede reparar ejecutando la instrucción REPAIR TABLE:

REPAIR TABLE table_name;

Suponiendo que la reparación fue exitosa, verá un mensaje como este en su salida:

Output
+--------------------------+--------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+--------------------------+--------+----------+----------+
| database_name.table_name | repair | status | OK |
+--------------------------+--------+----------+----------+

Si la tabla aún está dañada, la documentación de MySQL sugiere algunos métodos alternativos para reparar las tablas dañadas.

Por otro lado, si la tabla dañada utiliza el motor de almacenamiento InnoDB, el proceso de reparación es diferente. InnoDB es el motor de almacenamiento predeterminado en MySQL desde la versión 8.0 y cuenta con comprobación y reparación automáticas de daños. InnoDB comprueba si hay páginas dañadas realizando sumas de comprobación en cada página que lee y, si encuentra una discrepancia en la intercalación, detiene automáticamente el servidor MySQL.

Es poco frecuente que sea necesario reparar tablas InnoDB, ya que InnoDB cuenta con un mecanismo de recuperación ante fallos que puede resolver la mayoría de los problemas al reiniciar el servidor. Sin embargo, si necesita reconstruir una tabla InnoDB dañada, la documentación de MySQL recomienda usar el método "Volcar y Recargar". Esto implica restaurar el acceso a la tabla dañada, usar la utilidad mysqldump para crear una copia de seguridad lógica de la tabla que preserve su estructura y los datos que contiene, y luego volver a cargar la tabla en la base de datos.

Con esto en mente, reinicie el servicio MySQL para ver si al hacerlo puede acceder al servidor:

sudo systemctl restart mysql

Si el servidor está inactivo o inaccesible, puede ser útil habilitar la opción InnoDB force_recovery. Puede hacerlo editando el archivo mysqld.cnf. En sistemas Ubuntu y Debian, este archivo suele estar en etc/mysql. En sistemas Red Hat y Rocky, suele estar en /etc/my.cnf.d.

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

En la sección [mysqld], agregue la siguiente línea:

. . .
[mysqld]
. . .
innodb_force_recovery=1

Guarde y cierre el archivo, y luego reinicie el servicio MySQL. Si puede acceder correctamente a la tabla dañada, use la utilidad mysqldump para volcar los datos de la tabla en un nuevo archivo. Puede nombrar este archivo como desee, pero aquí lo llamaremos dump.sql:

mysqldump database_name table_name > out.sql

Luego, elimine la tabla de la base de datos. Para evitar tener que volver a abrir el comando MySQL, puede usar el siguiente comando:

mysql -u user -p --execute="DROP TABLE database_name.table_name"

Después de esto, restaure la tabla con el archivo de volcado que creó:

mysql -u user -p < out.sql

Tenga en cuenta que el motor de almacenamiento InnoDB suele ser más tolerante a fallos que el antiguo motor MyISAM. Las tablas que utilizan InnoDB aún pueden corromperse, pero gracias a sus funciones de autorreparación, el riesgo de corrupción y fallos es significativamente menor.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

También te puede gustar