Cómo recuperar una base de datos MySQL después de eliminar archivos o una partición en Ubuntu: RAID 6 y LUKS2

Eliminar archivos o una partición completa de disco en Ubuntu puede provocar una pérdida crítica de datos, especialmente si hay una base de datos MySQL en ejecución en el servidor. La situación se vuelve mucho más compleja cuando el sistema de almacenamiento está construido sobre un arreglo RAID 6 y los datos están además protegidos con cifrado LUKS2. En estas condiciones, las herramientas estándar de recuperación no siempre ofrecen el resultado esperado, y las acciones descuidadas pueden destruir la información de forma permanente. En este artículo revisaremos posibles escenarios de pérdida de datos, las particularidades de trabajar con RAID 6 y LUKS2, y el proceso de recuperación de una base de datos MySQL después de la eliminación accidental de archivos o de una partición de disco.

Cómo recuperar una base de datos MySQL después de eliminar archivos o una partición en Ubuntu: RAID 6 y LUKS2

Los archivos de base de datos MySQL y sus copias de seguridad en un servidor Linux pueden quedar inaccesibles por diversos motivos: eliminación accidental de archivos, formateo o eliminación de una partición, corrupción del sistema de archivos, fallo del arreglo RAID, fallo de un disco o fallo del controlador RAID. La situación se complica aún más si los datos están almacenados en una partición cifrada con LUKS2.

Hetman RAID Recovery ayuda a reconstruir estructuras de arreglos RAID, localizar particiones perdidas, desbloquear LUKS2 si se dispone de la contraseña y recuperar archivos de bases de datos y volcados SQL.

Demostraremos el programa en un equipo con Windows. No obstante, Hetman RAID Recovery también está disponible para Linux y macOS.

Ir a ver
Cómo recuperar una base de datos MySQL eliminada de RAID 6 + LUKS2 (Ubuntu)

Cómo recuperar una base de datos MySQL eliminada de RAID 6 + LUKS2 (Ubuntu)

Preparación del entorno de pruebas y de la base de datos MySQL

Para las pruebas utilizamos un servidor Dell PowerEdge R710 con un controlador PERC H700.

Parámetro Especificación
Modelo de servidor Dell PowerEdge R710
Formato Rack 2U
Procesador Hasta 2 × Intel Xeon serie 5500/5600
RAM DDR3 ECC, hasta 288 GB (18 ranuras)
Controlador RAID Dell PERC H700
Tipo de RAID RAID por hardware
Niveles RAID compatibles RAID 0, 1, 5, 6, 10, 50, 60
Configuración del arreglo RAID 6
Interfaz de unidad SAS/SATA, hasta 6 Gbit/s
Número de bahías para unidades Hasta 6 × 3,5″ o 8 × 2,5″, según la configuración
Caché del controlador RAID 512 MB o 1 GB (según el modelo)
Protección de la caché BBU — protección de caché con batería
Sistema operativo Ubuntu Server
Cifrado de datos LUKS2 (a nivel de Linux, no en el controlador RAID)
Sistema de gestión de bases de datos MySQL
Tolerancia a fallos de RAID 6 Permite el fallo simultáneo de hasta dos discos
Herramientas de diagnóstico Dell OpenManage, MegaCLI, StorCLI (si es compatible)

Para proporcionar al sistema operativo acceso directo a cada disco físico, se crearon en el controlador seis arreglos RAID 0 de un solo disco, uno por cada disco. Ubuntu Server 24.04 se instaló en uno de ellos, y los otros cuatro se combinaron en un arreglo software MD RAID 6 mediante Cockpit.

En el arreglo se creó una tabla de particiones GPT y tres particiones, con ext4 como sistema de archivos y cifrado LUKS2 seleccionado para cada una de ellas.

Dispositivo MDRAID

El directorio mysql-data se colocó en la tercera partición y contenía datos de la base de datos de prueba company_db, archivos del sistema y registros de MySQL. Se utilizó MySQL versión 8.0.46.

El directorio mysql-data con datos de la base de datos de prueba company_db

La propia base de datos contenía las tablas customers, products y orders, así como una vista, un procedimiento almacenado y una función.

La base de datos contiene las tablas customers, products y orders

La copia de seguridad de la base de datos se creó en MySQL Workbench como un volcado SQL y se guardó en el directorio mysql-backups.

Antes de la prueba, los directorios mysql-data y mysql-backups se copiaron desde la tercera partición a la segunda. Luego, la segunda partición se eliminó mediante Cockpit, y los archivos de la base de datos y el volcado SQL se eliminaron de la tercera partición usando Shift + Delete, omitiendo la Papelera de reciclaje. Esto preparó dos escenarios: recuperación de archivos desde una partición eliminada y recuperación de archivos eliminados desde una partición conservada.

La segunda partición se eliminó mediante Cockpit

Conexión de las unidades para el análisis

En nuestro caso, los discos que participaban en RAID 6 se conectaron a un equipo con Windows mediante una estación de acoplamiento USB, y se inició Hetman RAID Recovery para realizar el análisis.

Para recuperar datos de matrices RAID dañadas, dispositivos NAS y otros sistemas de almacenamiento multidisco.

Además de trabajar con discos físicos, el programa admite el análisis de imágenes completas de disco sector por sector. Dichas imágenes pueden crearse directamente en Hetman RAID Recovery mediante la función Guardar disco y almacenarse en otra unidad sana.

Hetman RAID Recovery: Guardar disco

Esto resulta especialmente útil si el disco es inestable, presenta sectores defectuosos o genera errores de lectura. Crear una imagen conserva los datos legibles y permite analizar la copia posteriormente, reduciendo el número de accesos repetidos al disco problemático.

Si los discos permanecen en el servidor Linux y son legibles, pueden analizarse de forma remota. Para ello, conéctese al servidor mediante SSH en Hetman RAID Recovery y obtenga acceso a sus dispositivos de bloque.

Cómo recuperar una base de datos MySQL eliminada de RAID 6 + LUKS2

PASO 1. Detección automática de particiones RAID 6 y LUKS

Inmediatamente después del inicio, Hetman RAID Recovery detectó automáticamente la configuración MD RAID 6 y reconstruyó su estructura para el análisis.

Para recuperar datos de matrices RAID dañadas, dispositivos NAS y otros sistemas de almacenamiento multidisco.
Hetman RAID Recovery: configuración MD RAID 6

En el panel derecho se muestran los parámetros principales del arreglo: tipo y estado de RAID, orden y tamaño de bloques, así como la lista de discos participantes con su secuencia, desplazamientos y tamaños.

Hetman RAID Recovery: configuración MD RAID 6

En el arreglo ensamblado, el programa detectó tres particiones, incluida la segunda eliminada previamente, e identificó cifrado LUKS en las tres. Antes de introducir la contraseña, no se muestran sus sistemas de archivos: las particiones deben desbloquearse para continuar el análisis.

La segunda partición se muestra en la interfaz como espacio no asignado marcado como LUKS. Esto significa que el programa reconoció los metadatos del contenedor cifrado en la ubicación de la partición eliminada.

Hetman RAID Recovery: el programa detectó tres particiones en el arreglo ensamblado

PASO 2. Desbloqueo y recuperación de archivos eliminados

Para iniciar el análisis, haga doble clic en la partición requerida. Como está cifrada con LUKS2, el programa solicitará una contraseña o la especificación de un archivo de clave. Introduzca la contraseña y haga clic en Desbloquear.

Hetman RAID Recovery: la partición está cifrada con LUKS2

Primero, seleccione Escaneo rápido. Espere a que finalice el análisis; a continuación, el programa abrirá la estructura de los directorios encontrados. En nuestra prueba, el escaneo rápido encontró los archivos necesarios en la partición eliminada.

Si en su caso no se encuentran los datos requeridos, vuelva a la selección del tipo de análisis y ejecute Análisis completo, especificando el sistema de archivos EXT2/3/4.

Hetman RAID Recovery: seleccione Escaneo rápido

Revise los resultados del análisis. En nuestro caso, el programa mostró el volcado SQL backup1.sql, el directorio company_db y los archivos de tabla de MySQL con la extensión .ibd. El contenido del volcado SQL se puede comprobar en la ventana de vista previa.

Hetman RAID Recovery: volcado SQL backup1.sql, directorio company_db y archivos de tabla MySQL

Seleccione los archivos y carpetas que desea recuperar y luego haga clic en Recuperación. Elija un método de guardado, indique otro disco físico y mantenga habilitada la opción de restaurar la estructura de directorios.

No guarde los archivos encontrados en la misma unidad desde la que se están recuperando, para evitar sobrescribir otros datos perdidos.

Hetman RAID Recovery: recuperación de archivos encontrados

PASO 3. Restauración de la base de datos a partir de un volcado SQL

La forma más sencilla de restaurar la base de datos es utilizar el volcado SQL recuperado. Contiene comandos para crear la estructura de la base de datos y restaurar los datos al estado en que se encontraba la copia de seguridad. Si se seleccionaron las opciones de exportación adecuadas, el volcado también incluirá vistas, procedimientos y funciones.

Inicie MySQL Workbench y conéctese al servidor MySQL. Abra el menú Servidor — Importación de datos, seleccione Importar desde archivo autónomo y especifique el archivo SQL recuperado.

MySQL Workbench: Servidor — Importación de datos - Importar desde archivo autónomo

Si se perdió por completo el directorio mysql-data con los archivos de sistema de MySQL, primero debe restaurar la funcionalidad del servidor o preparar una nueva instancia de MySQL. Solo entonces se podrá importar el volcado a través de Workbench.

Seleccione el esquema de destino o cree una nueva base de datos company_db, y luego haga clic en Iniciar importación. Espere a que finalice la operación y revise el registro en busca de errores.

MySQL Workbench: crear una nueva base de datos company_db

Actualice la lista de esquemas. La base de datos ahora debe contener las tablas customers, products y orders. Ábralas y verifique los registros.

MySQL Workbench: tablas customers, products y orders

PASO 4. Restauración de la base de datos a partir de archivos físicos de MySQL

Si no dispone de un volcado SQL adecuado, pero Hetman RAID Recovery logró recuperar el directorio de la base de datos con los archivos de tabla, puede intentar una recuperación física.

En nuestro caso, el directorio company_db conservó los archivos customers.ibd, products.ibd y orders.ibd. Cada uno contiene los datos y los índices de la tabla InnoDB correspondiente.

Archivos customers.ibd, products.ibd y orders.ibd

Copiar simplemente estos archivos al directorio de MySQL no es suficiente. El nuevo servidor aún no dispone de las definiciones de las tablas correspondientes en el diccionario de datos. Por lo tanto, la recuperación consta de dos etapas: primero, debe recrear la estructura de la tabla y, después, asociarle los archivos .ibd recuperados.

Para recuperar, prepare un servidor funcional con la misma versión de MySQL. Conéctese a él mediante Workbench y cree una base de datos vacía.

Conéctese al servidor mediante Workbench y cree una base de datos vacía

Si se conserva el script SQL original con la estructura, ejecute los comandos CREATE TABLE de ese script. Las tablas deben coincidir exactamente con las originales, incluidos los tipos de columna, claves, índices, intercalación y formato de fila. No es necesario ejecutar los comandos de inserción de datos; en esta etapa, las tablas deben permanecer vacías.

PASO 5. Restauración de la estructura de las tablas a partir de archivos ibd

Si no está disponible el script SQL original, puede intentar recuperar la estructura de la tabla a partir de los archivos .ibd. En MySQL 8.0, estos contienen SDI, es decir, metadatos del diccionario de datos. Para leerlos se utiliza la utilidad ibd2sdi.

Ejecutela para cada archivo recuperado y guarde los resultados en formato JSON. En nuestro caso, obtuvimos metadatos de customers.ibd, products.ibd y orders.ibd, y luego usamos jq para inspeccionar la definición de la tabla customers.

ibd2sdi

Los metadatos pueden incluir el nombre de la tabla, la versión de MySQL, el motor de almacenamiento, la intercalación y los parámetros del espacio de tablas. También contienen las definiciones de columnas. La información sobre claves primarias y únicas, índices secundarios y relaciones con otras tablas se almacena por separado.

El JSON resultante puede analizarse manualmente en un editor de texto. En función de los parámetros detectados, scripts y convertidores especiales pueden generar automáticamente comandos CREATE TABLE preliminares. Para un gran número de tablas, esto acelera significativamente la recuperación de la estructura.

Los metadatos pueden incluir el nombre de la tabla y la versión de MySQL

PASO 6. Asociación de los archivos ibd recuperados

En Workbench, desactive temporalmente la comprobación de claves foráneas y ejecute el comando ALTER TABLE … DISCARD TABLESPACE para cada tabla creada. Esto separa el espacio de tablas vacío creado y prepara la tabla para asociar el archivo recuperado.

En Workbench, desactive temporalmente la comprobación de claves foráneas

Después, copie los archivos .ibd correspondientes al directorio de la base de datos en el servidor preparado. Tras la copia, no olvide asignar al archivo el propietario mysql y establecer los permisos de acceso necesarios.

Copie los archivos .ibd correspondientes al directorio de la base de datos en el servidor preparado

Vuelva a Workbench y ejecute ALTER TABLE … IMPORT TABLESPACE para cada tabla. Las advertencias sobre archivos .cfg faltantes no son críticas: MySQL continuará la importación sin validación automática de la estructura. MySQL registrará los espacios de tablas recuperados y asociará los datos y los índices a las definiciones de tabla creadas previamente.

Vuelva a Workbench y ejecute ALTER TABLE … IMPORT TABLESPACE

Tras una importación correcta, vuelva a habilitar la comprobación de claves foráneas. Actualice la lista de esquemas y verifique el número y el contenido de los registros mediante consultas SELECT.

Después de una importación correcta, habilite la comprobación de claves foráneas

Los archivos .ibd permiten restaurar tablas, sus datos e índices. Sin embargo, las vistas, los procedimientos y las funciones no se almacenan como archivos independientes en el directorio company_db. Si no están incluidos en el volcado SQL, estos objetos deben recrearse manualmente.

Después de verificar la base de datos restaurada, recomendamos crear una nueva copia de seguridad en formato de volcado SQL.

Conclusión

Con Hetman RAID Recovery fue posible reconstruir automáticamente la estructura de Linux MD RAID 6 y detectar y desbloquear contenedores LUKS2 mediante la contraseña conocida. Un escaneo rápido encontró los archivos necesarios tanto después de su eliminación como después de la eliminación de una partición completa.

El volcado SQL recuperado puede importarse a través de MySQL Workbench, restaurando la estructura y los datos de la base de datos al estado en que se creó la copia de seguridad. Si no se dispone de un volcado adecuado, las tablas individuales de InnoDB pueden recuperarse a partir de archivos .ibd recreando primero su estructura.

Raidel Arbelay Becerra

Autor: , Escritor técnico

Raidel Arbelay Becerra es un escritor técnico de Hetman Software y la voz y la cara del canal de YouTube de Hetman Software: Recuperación de datos. Escribe artículos, tutoriales y reseñas en profundidad sobre el funcionamiento del software de la empresa con todo tipo de dispositivos de almacenamiento.

Angel Villares

Editor: , Escritor técnico

Ángel Villares es autor y uno de los ingenieros informáticos de Hetman Software. Cuenta con casi 10 años de experiencia en el campo de la informática: administración y configuración de servidores, instalación de sistemas operativos y de diferentes programas informáticos, configuración de redes, seguridad de la información, implantación y asesoramiento en el uso de software especializado. Es un experto en el campo de la recuperación de datos, sistemas de archivos, dispositivos de almacenamiento y matrices RAID.

Recomendado para ti