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 a innodb_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:

  1. ¿Cuándo se crea el archivo?
  2. ¿Cuándo se escribirá el archivo?
  3. ¿Cuándo se leerá el archivo?
  4. ¿Cuál sería la consecuencia si el archivo está dañado o eliminado?
¿Fue útil?

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 de InnoDB a pesar de que existe el archivo .frm para la tabla. Tal vez ha eliminado y recreado los archivos de datos de InnoDB , pero se ha olvidado de eliminar los archivos correspondientes de .frm de las tablas de InnoDB , o   ¿Han movido los archivos .frm a otra base de datos?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top