En el mundo moderno, las empresas no dependen solamente de una plataforma de servidor de base de datos específica. Existen muchas plataformas de base de datos disponibles que son adecuadas para manejar cargas de trabajo moderadas y requisitos de clientes de alta disponibilidad y recuperación ante desastres. MySQL es una de esas plataformas de base de datos que proporciona muchas características y alta performance.
Al igual que otras RDBMS, MySQL también es propenso a la corrupción de las bases de datos y las tablas. La reciente interrupción de servicio causada por Microsoft y CrowdStrike también afectó los servidores de base de datos MySQL. Debido a fallos del sistema operativo, las tablas de la base de datos o bases de datos enteras se corromperían.
En este artículo, les mostraré cómo podemos corromper y reparar una tabla de la base de datos de MySQL. Este artículo es útil para DBAs para simular los fallos y les ayuda a determinar la mejor manera posible para restaurar o reparar la tabla corrupta de MySQL.
Comprensión de la Corrupción de la Base de Datos MySQL
La corrupción de la base de datos de MySQL puede manifestarse de varias maneras, incluidas:
Tablas Inaccesibles
La tabla completa o una subcategoría específica de la tabla se hace inaccesible. Cuando intentas acceder a la tabla corrupta, encontrarás errores que señalan la corrupción del archivo de índice o del archivo de datos de una tabla.
Errores de Inconsistencia de Datos
Si la tabla se corrompe, en lugar de datos significativos, su consulta podría devolver algunos valores basura o resultados inconsistentes o incompletos.
Apagones Inesperados
En algunos casos, MySQL puede fallar mientras accede a la tabla o ejecuta las copias de seguridad utilizando mysqldump
. Una vez encontré este error mientras simulaba el escenario de corrupción. Corrompí el archivo de datos de una tabla. Después de iniciar el servicio, cuando intenté acceder a la tabla usando una sentencia SELECT
, el servicio de MySQL se cayó automáticamente.
Mensajes de Error Durante las Operaciones de Base de Datos
Al acceder a la tabla corrupta, podría encontrar ciertos errores como:
ERROR 1016: Can't open file: 'table_name.MYI' (errno: 145)
Table ‘table_name’ is marked as crashed and should be repaired
Got error 28 from storage engine
ERROR 1030: Got error 127 from storage engine
Estos errores indican que el archivo de datos o los archivos de índice asociados están corrompidos.
Es crucial entender la causa raíz de la corrupción para prevenir futuras apariciones y asegurar la integridad de los datos.
Prerequisitos para Reparar las Tablas de MySQL
Antes de intentar cualquier reparación, asegúrese de que tiene lo siguiente:
- Copia completa de su base de datos de MySQL
- Espacio de disco suficiente
- Acceso administrativo al servidor de MySQL
Ahora, simulemos la corrupción de la tabla.
Tabla MySQL Corrupta
Antes de aprender el proceso de reparación de la base de datos, primero entendremos cómo corromper la base de datos. Para la demostración, he creado una base de datos llamada “CorruptDB” en un servidor de base de datos MySQL. También he creado una tabla llamada corrupt_table
en la base de datos CorruptDB.
Aquí está el código para crear una base de datos y una tabla.
Create database corruptDB;
Use corruptdb;
CREATE TABLE corrupt_table (
id INT AUTO_INCREMENT PRIMARY KEY,
data VARCHAR(100)
) ENGINE=MyISAM;
He añadido un millón de registros a la tabla ejecutando la siguiente consulta.
INSERT INTO corrupt_table (data)
SELECT CONCAT('RandomData-', FLOOR(1000 + (RAND() * 9000)))
FROM corrupt_table;
Tenga en cuenta que la simulación de la corrupción de la tabla se ha realizado en mi portátil. No intente esto en producción, desarrollo o cualquier otro entorno. La tabla que estoy usando en esta demostración se creó con el motor de base de datos MyISAM. Puede leer sobre Motores de Almacenamiento Alternativos para aprender más sobre los motores de base de datos de MySQL Server.
He realizado los siguientes pasos para corromper la tabla.
Paso 1: Detenga los Servicios del Servidor MySQL
Necesita detener el servidor MySQL. Para hacerlo, ejecute PowerShell como administrador y ejecute el siguiente comando.
net stop MySQL
Alternativamente, también puede detenerlo desde Servicios.
Paso 2: Corromper el Archivo de Índice de la Tabla
Ahora, debemos corromper el archivo de índice de la tabla. Cuando creas cualquier tabla en el motor de base de datos MyISAM, se crean tres archivos cuando creas una tabla usando el motor de base de datos MyISAM.
- Archivos MYD: Este archivo contiene los datos actuales.
- Archivos MYI: Este es un archivo de índice.
- Archivos Frm: El archivo contiene una estructura de tabla.
Vamos a corromper el archivo de índice. Los archivos de datos se encuentran en la ubicación predeterminada, que es “C:\ProgramData\MySQL\MySQL Server 8.0\Data\corruptdb.” Para la corrupción, estamos utilizando un editor hexadecimal.
Descargue e instale el editor hexadecimal. Abra los archivos MYI con él. El archivo se parece a la siguiente imagen:
Reemplace los primeros 5 bytes con algunos valores aleatorios. Guarde el archivo y cierre el editor.
Ahora, empecemos el servicio y intentemos acceder a la tabla.
Paso 3: Iniciar los Servicios de MySQL y Acceder a la Tabla
Primero, inicie los Servicios de MySQL ejecutando el siguiente comando en PowerShell.
net start MySQL
Una vez que los servicios estén iniciados, ejecute la siguiente consulta en la línea de comandos de MySQL.
mysql> use corruptdb;
Database changed
mysql> select count(1) from corrupt_table;
La consulta devolvió el siguiente error:
El error indica que el índice de la tabla corrupt_table
se ha corromper y debe ser reparado.
Métodos manuales para reparar tablas de MySQL
Hay ciertos métodos que puede utilizar para reparar la tabla corrompida de MySQL. El primer método es utilizar los comandos chequear tabla y reparar tabla.
Comandos Chequear Tabla y Reparar Tabla
Puede restaurar la tabla utilizando los comandos integrados CHECK TABLE
y REPAIR TABLE
de MySQL. Estos comandos se utilizan para diagnosticar y reparar cualquier tabla MyISAM.
La orden de comprobar la tabla verifica la integridad de la tabla. Comprueba la estructura de la tabla, índices y datos para cualquier corrupción y muestra los detalles. La sintaxis es la siguiente:
CHECK TABLE [option]
Puedes especificar las diferentes opciones.
QUICK
: Esta opción verifica rápidamente y identifica problemas como la corrupción de los índices.FAST
: Chequea las tablas que no se cierran correctamente.CHANGED
: Esta opción verifica solo aquellas tablas que han sido modificadas después de la última ejecución deCHECK TABLE
.MEDIUM
: Esta opción verifica los registros y verifica que los enlaces entre la tabla y los datos son correctos.EXTENDED
: Esta opción escanea detalladamente y verifica la estructura de la tabla y sus contenidos.
En esta demostración, realizaremos una escaneo rápido. Aquí está la orden.
CHECK TABLE corrupt_table
Captura de pantalla:
Como puede ver en la captura de pantalla anterior, el error indica que el índice de la tabla corrupt_table
está corrupto y necesita ser arreglado.
Usaremos la orden REPAIR TABLE
para arreglar la corrupción en la tabla. La orden REPAIR TABLE
se utiliza para recuperar la estructura de la tabla y los datos de la corrupción, especialmente la tabla que tiene el motor de base de datos MyISAM. En caso de que el índice de la tabla esté corrupto, la orden REPAIR TABLE
reconstruye los índices.
La sintaxis de REPAIR TABLE
es la siguiente:
REPAIR TABLE [option]
Puedes especificar las siguientes opciones:
QUICK
: Solamente repara el archivo de índice de una tabla. No accede al archivo de datos de una tabla.EXTENDIDO
: Cuando utilizamos esta opción, la orden realizará una reparación minuciosa. También repara o recrea el archivo de índice examinando todos los registros de la tabla.
En esta demostración, hemos corrompido el índice de la tabla; por lo tanto, utilizaremos la opción RÁPIDO
. Ejecute la siguiente orden.
REPAIR TABLE corrupt_table
Captura de pantalla:
Como puede ver en la captura de pantalla anterior, la tabla corrupt_table
ha sido reparada con éxito. Para verificar, ejecute la siguiente consulta en MySQL Workbench:
use corruptdb;
select count(1) from corrupt_table;
Salida de consulta:
Como puede ver, la tabla ahora es accesible.
Restaurar Tabla Usando la Orden mysqldump
El segundo método es restaurar toda la tabla desde la copia de seguridad. Este método se puede utilizar cuando la tabla está muy corrompida y no se puede reparar usando la orden REPAIR TABLE
.
Para restaurar una tabla de MySQL desde la copia de seguridad, podemos usar la orden mysqldump
. Puede leer el artículo “mysqldump — Un Programa de Copia de Seguridad de Base de Datos” para aprender más acerca de cómo usar la orden mysqldump. La sintaxis para restaurar la tabla se muestra a continuación.
mysql -u [username] -p [database_name] < [table_dump.sql]
En la sintaxis:
Nombre de usuario
: Ingrese el nombre de usuario que utiliza para conectarse a la base de datos de MySQL.-p
: Especifique la contraseña. Si la deja en blanco, MySQL le pedirá una contraseña.[nombre_de_base_de_datos]
: Especifique el nombre de la base de datos en la que está intentando restaurar la tabla.Table_dump.sql
: Especificar el nombre completo del archivo de respaldo.
Para la demostración, he realizado un respaldo de la base de datos CorruptDB que se encuentra en el directorio C:\MySQLData\Backup.
Para restaurar la corrupt_table
, podemos utilizar el siguiente comando.
mysql -u root -p corruptdb < C:\MySQLData\Backup\corrupt_table.sql
Una vez que se ejecute correctamente el comando, podrá acceder a la tabla. Ejecute la siguiente consulta para verificar.
use corruptdb;
select count(1) from corrupt_table;
Salida de consulta:
Como puede ver en la captura de pantalla anterior, la tabla ha sido restaurada exitosamente.
Usando phpMyAdmin
También puede usar la herramienta phpMyAdmin para reparar cualquier base de datos MySQL corrupto. phpMyAdmin es una interfaz de usuario gráfico para administrar y mantener MySQL y MariaDB. Para la demostración, la he instalado en mi portátil.
- Para reparar la tabla, inicie phpMyAdmin y navegue a la base de datos en la que existe la tabla corrupta.
- En el panel derecho, puede ver la lista de tablas creadas en la base de datos CorruptDB.
- Seleccione
Corrupt_table
de la lista y seleccione la opción Reparar tabla del cuadro desplegable.
Aquí tienen una captura de pantalla como referencia:
Una vez que se repare la tabla, pueden ver que el estado de la corrupt_table
se convierte en OK. Aquí tienen la captura de pantalla:
Conclusión
En este artículo, aprendimos sobre las posibles razones de la corrupción de la base de datos MySQL y cómo solucionarlas. He explicado un proceso paso a paso para corromper tablas de MySQL usando un editor hexadecimal. También he cubierto cómo solucionarlos usando las órdenes CHECK TABLE
y REPAIR TABLE
. También hemos aprendido cómo restaurar la tabla usando la utilidad mysqldump
.
La reparación de una tabla de base de datos MySQL corrupta puede ser desafiante, pero con las herramientas y métodos adecuados, es manejable. Los métodos manuales proporcionan una solución básica, mientras que phpMyAdmin ofrece una opción de recuperación amplia y fiable. Siempre asegúrese de hacer copias de seguridad regulares y mantener la salud de su base de datos para minimizar el riesgo de corrupción.
Source:
https://dzone.com/articles/repair-corrupt-mysql-database-tables-step-by-step