Cambios en una tabla de MySQL InnoDB: ¿qué archivos están involucrados y por qué?
-
05-07-2019 - |
Pregunta
Al cambiar el contenido de una tabla de InnoDB MySQL, los siguientes archivos en el sistema de archivos parecen estar involucrados / cambiados:
-
/path/to/mysql/data/[database?/[table?.ibd
(debido ainnodb_file_per_table
) /path/to/mysql/data/data/ib_logfile0
/path/to/mysql/data/data/ib_logfile1
/path/to/mysql/data/data/ibdata1
Para cada uno de estos archivos:
- ¿Cuándo se crea el archivo?
- ¿Cuándo se escribirá el archivo?
- ¿Cuándo se leerá el archivo?
- ¿Cuál sería la consecuencia si el archivo está dañado o eliminado?
Solución
/path/to/mysql/data/[database]/[table].ibd (due to innodb_file_per_table)
Aquí es donde se almacenan los datos. Se crean cuando crea las tablas.
/path/to/mysql/data/data/ib_logfile0
/path/to/mysql/data/data/ib_logfile1
Estos son logfiles
.
Todos los cambios de datos se escriben en los logfiles
secuencialmente, lo que permite el registro de escritura anticipada (crucial para las transacciones)
/path/to/mysql/data/data/ibdata1
Aquí es donde se almacenan los datos del sistema y los datos de UNDO
.
Si ibdata
no se encuentra, MySQL
pensará que el motor InnoDB
no está inicializado y solo creará el nuevo ibdata . Lo mismo con
logfiles
.
Si se emite una consulta en una tabla, y no se encuentra el archivo .ibd
, MySQL
fallará con este mensaje:
No se puede encontrar la tabla
base de datos / tabla
del diccionario de datos interno deInnoDB
a pesar de que existe el archivo.frm
para la tabla. Tal vez ha eliminado y recreado los archivos de datos deInnoDB
, pero se ha olvidado de eliminar los archivos correspondientes de.frm
de las tablas deInnoDB
, o ¿Han movido los archivos.frm
a otra base de datos?