Recuperar base de datos MySQL o SQL Server corrupta
La corrupción de una base de datos es una de las emergencias más graves que puede sufrir una empresa. A diferencia de la pérdida de ficheros simples, una base de datos corrupta puede inutilizar completamente una aplicación crítica: un ERP, un e-commerce, un sistema de gestión hospitalaria o un portal de clientes. En este artículo explicamos las causas más comunes de corrupción en MySQL (InnoDB y MyISAM) y SQL Server, las técnicas de recuperación disponibles, cuándo puedes intentarlo tú mismo y cuándo necesitas un especialista, y cómo prevenir que vuelva a ocurrir.
Causas más comunes de corrupción de bases de datos
Las bases de datos no se corrompen sin motivo. Detrás de casi todos los casos hay una de estas causas:
- Apagado abrupto del servidor: Un corte eléctrico o un reset forzado durante una escritura puede dejar transacciones incompletas y archivos en estado inconsistente. Es la causa número uno en MySQL InnoDB sin UPS.
- Fallo del disco duro o SSD: Sectores defectuosos en el disco donde residen los archivos de base de datos (ibdata1, .ibd, .MYD, .mdf, .ldf) generan corrupción a nivel de página que el motor no puede reparar por sí solo.
- Fallo de RAID: La reconstrucción incorrecta de un array (especialmente tras un segundo fallo en RAID 5) puede introducir datos erróneos en los archivos de base de datos.
- Bug del motor de base de datos: Versiones antiguas de MySQL tienen bugs documentados en InnoDB que pueden corromper el tablespace bajo determinadas condiciones de carga alta.
- Modificación manual incorrecta: Editar directamente los archivos binarios, mover archivos .ibd sin seguir el procedimiento de transportable tablespaces, o restaurar backups incompatibles.
- Ransomware o ataque malicioso: Algunas cepas corrompen deliberadamente los archivos de base de datos antes de cifrarlos para maximizar el daño.
MySQL InnoDB: niveles de recuperación forzada (innodb_force_recovery)
MySQL InnoDB tiene un mecanismo integrado de recuperación para situaciones de corrupción: la variable innodb_force_recovery. Permite arrancar el servidor en modo lectura aunque haya inconsistencias, facilitando la exportación de datos antes de que la situación empeore.
| Nivel | Descripción | Cuándo usarlo |
|---|---|---|
| 1 | Omite la recuperación del undo log de transacciones incompletas | Fallo en el crash recovery |
| 2 | No ejecuta el thread de rollback en background | El nivel 1 no arranca el servidor |
| 3 | No intenta hacer rollback de transacciones al recuperar | Bloques corruptos en el undo log |
| 4 | Omite la comprobación de integridad de las páginas InnoDB | Páginas corruptas que impiden el arranque |
| 5 | No comprueba las páginas del undo log al arrancar | Corrupción profunda del undo tablespace |
| 6 | No descarga cambios del buffer pool, omite el forward redo | Último recurso antes del especialista |
Procedimiento básico: Añade innodb_force_recovery=1 en la sección [mysqld] de tu my.cnf o my.ini. Si MySQL arranca, exporta inmediatamente todas las bases de datos con mysqldump --single-transaction. Si no arranca, prueba el nivel 2, luego 3, y así sucesivamente. Con nivel 4 o superior, el servidor arranca en modo solo lectura. Nunca uses innodb_force_recovery en producción activa. Es exclusivamente para recuperar datos y migrar a una instancia limpia.
MySQL MyISAM: CHECK TABLE y REPAIR TABLE
Las tablas MyISAM (menos comunes desde MySQL 5.5 pero presentes en instalaciones antiguas como WordPress sobre versiones legadas) tienen sus propias herramientas de reparación integradas en el motor:
CHECK TABLE nombre_tabla;— Verifica si la tabla tiene errores y describe el tipo de corrupción.REPAIR TABLE nombre_tabla;— Intenta reparar la tabla. Funciona en la mayoría de casos de corrupción lógica sin daño físico.myisamchk -r tabla.MYI— Herramienta de línea de comandos para reparación cuando el servidor no puede arrancar.
Advertencia importante: Si el fallo proviene de un disco con sectores defectuosos, la reparación puede empeorar la situación al escribir sobre los mismos sectores dañados. Clona siempre el disco antes de cualquier operación de reparación cuando hay indicios de fallo físico del dispositivo.
SQL Server: DBCC CHECKDB y opciones de reparación
En SQL Server, el comando equivalente es DBCC CHECKDB, que verifica la integridad lógica y física de todos los objetos de la base de datos:
DBCC CHECKDB ('nombre_bd') WITH NO_INFOMSGS;— Comprobación completa, solo muestra errores.DBCC CHECKDB ('nombre_bd', REPAIR_FAST);— Reparaciones menores sin pérdida de datos.DBCC CHECKDB ('nombre_bd', REPAIR_REBUILD);— Reconstruye índices y repara sin pérdida de datos en la mayoría de casos.DBCC CHECKDB ('nombre_bd', REPAIR_ALLOW_DATA_LOSS);— Último recurso: puede eliminar páginas o filas corruptas. Implica pérdida potencial de datos reales.
Los archivos clave de SQL Server son el MDF (datos principales), NDF (datos secundarios) y LDF (log de transacciones). Un LDF corrupto es frecuente tras cierres abruptos. En muchos casos puede desprenderse si el MDF era consistente en el último checkpoint. Los especialistas pueden reconstruir el LDF o extraer datos directamente del MDF con herramientas como Stellar Repair for MS SQL o ApexSQL Recover.
Cuándo intentarlo tú mismo vs. llamar a un especialista
| Situación | DIY posible | Necesitas especialista |
|---|---|---|
| MySQL no arranca, disco sano | Sí (innodb_force_recovery 1–3) | Si nivel 4+ no funciona |
| Tablas MyISAM corruptas, disco sano | Sí (REPAIR TABLE) | Si el disco tiene errores físicos |
| SQL Server con errores DBCC, disco sano | Sí (REPAIR_REBUILD) | Si REPAIR_ALLOW_DATA_LOSS pierde datos críticos |
| Fallo físico del disco (sectores malos) | No | Sí (laboratorio + clonado previo) |
| RAID degradado o fallado con BD en él | No | Sí (reconstrucción RAID + BD) |
| Ransomware ha cifrado .ibd o .mdf | No | Sí (análisis de cepa primero) |
Precios de recuperación de bases de datos
El coste de recuperación profesional varía según la complejidad del caso:
- Corrupción lógica simple (disco sano, innodb_force_recovery, DBCC): 300–500 €. Generalmente resuelto en 24-48 horas.
- Fallo físico del disco con base de datos: 400–800 €. Implica primero la recuperación del disco y luego el tratamiento de la base de datos.
- RAID con base de datos corrupta: 600–1.500 €. La reconstrucción del array es el paso previo obligatorio.
- Bases de datos de gran tamaño (más de 100 GB) o múltiples instancias: 800–2.000 €.
Prevención: cómo evitar la corrupción de bases de datos
La mejor recuperación es la que no necesitas. Estas medidas reducen drásticamente el riesgo:
- UPS (alimentación ininterrumpida): El corte eléctrico es la causa número uno. Un UPS adecuado da tiempo suficiente para un apagado limpio del servidor.
- Monitorizar el estado SMART del disco: Herramientas como Zabbix, Nagios o simplemente
smartctlalertan de sectores reasignados antes de que el fallo sea total. - Backups verificados con frecuencia: Para MySQL,
mysqldump --single-transactiondiario o Percona XtraBackup para backups en caliente sin tiempo de inactividad. Para SQL Server, jobs con backups diferenciales y verificación automática. - RAID adecuado + monitoreo: RAID 1 o RAID 5 con spare disk activo y alertas por email cuando un disco empiece a degradarse.
- Actualizar el motor de BD: MySQL 8.0+ y SQL Server 2019+ tienen mejoras significativas en la resiliencia ante fallos inesperados respecto a versiones anteriores.
Herramientas DIY para bases de datos MySQL: resumen rápido
Si no tienes experiencia con la línea de comandos de MySQL, existen interfaces gráficas que pueden ayudarte en los primeros pasos:
- phpMyAdmin: Permite ejecutar REPAIR TABLE y CHECK TABLE desde el navegador. Incluido en la mayoría de hostings.
- MySQL Workbench: Herramienta oficial de Oracle. Permite conectarse al servidor, lanzar queries de reparación y exportar datos aunque el servidor esté en modo recovery.
- HeidiSQL: Cliente MySQL gratuito para Windows. útil para exportar tablas accesibles cuando otras están corruptas.
- Stellar Repair for MySQL: Herramienta de pago (49 USD) que puede reparar archivos .frm e InnoDB directamente sin necesidad de que el servidor arranque.
¿Tu base de datos no arranca o ha perdido datos? Solicita ahora tu diagnóstico gratuito. Nuestros técnicos especializados en recuperación de bases de datos te darán una valoración en menos de 2 horas sin ningún compromiso.