Recargar/redirigir automáticamente (iframes)
30 de diciembre de 2023Habilitando estadísticas y optimizando Postgresql
10 de enero de 2024Este procedimiento explica la recuperación de tablas (ficheros .ibd) tras la pérdida o corrupción del diccionario de datos innodb ubicado en el archivo ibdata1. Normalmente las bases de datos y las tablas siguen apareciendo a través de la consola (gráfica o de texto) pero los datos son inaccesibles debido a la pérdida (o corrupción) del archivo que hace de conector entre el engine de mysql/mariadb y las tablas almacenadas en formato innodb.
Esquema de funcionamiento del motor transaccional innodb.
Se recomienda tener habilitado el parámetro “innodb_file_per_table” en el archivo de configuración my.cnf, esto creará un archivo .ibd y .frm por cada tabla nueva.
1.- Movemos los archivos antiguos ibdata1 y ib_logfile0 a otro directorio, rearrancamos el servicio mysql, esto creará otro par de ficheros nuevos para el motor innodb.
2.- Creamos la base de datos con el mismo nombre. Cargamos un archivo sql con el nombre y definición de la estructura de la antigua tabla e importamos. Si no tenemos un fichero de definición de tabla creamos una tabla con una estructura simple (esto no lo he probado pero lo he leído en otros artículos, parece ser que no es imprescindible que tenga los campos correctos ya que tras hacer el import en un paso posterior se sobrescribe la estructura de nuevo).
3.- Ahora descartamos la recien creada tabla con el comando:
ALTER TABLE my_ddbb.my_table DISCARD TABLESPACE;
esto borrará el archivo .ibd pero no el .frm.
4.- Copiamos el archivo huérfano .ibd en: /var/lib/mysql/my_ddbb/my_old_file_table.ibd
5.- Ejecutamos la importación del antiguo archivo .ibd con:
ALTER TABLE my_ddbb.my_table IMPORT TABLESPACE;
esto registrará de nuevo la tabla en el archivo de diccionario innodb ibdata1.
Ahora ya podemos acceder a los datos (filas) del archivo huérfano ibd que era innaccesible. Es posible que aparezca algún Warning avisándonos de posibles errores si no se detecta correctamente la codificación del archivo, en mi caso los ignoré y no tuve problema.
Pruebas realizadas con base de datos mariadb 10.3 e interface gráfico para db Heidi 12.5.
Otros artículos relacionados:
https://backup.ninja/news/recovering-orphaned-innodb-tables-guide
https://www.ipserverone.info/knowledge-base/how-to-recover-an-orphan-innodb-database-from-ibd-file