Modifiche a una tabella MySQL InnoDB: quali file sono coinvolti e perché?
-
05-07-2019 - |
Domanda
Quando si modifica il contenuto di una tabella MySQL InnoDB, i seguenti file sul file system sembrano essere coinvolti / modificati:
-
/path/to/mysql/data/[database×/[table lasting.ibd
(dovuto ainnodb_file_per_table
) -
/ path / to / mysql / data / data / ib_logfile0
-
/ path / to / mysql / data / data / ib_logfile1
-
/ path / to / mysql / data / data / ibdata1
Per ciascuno di questi file:
- Quando viene creato il file?
- Quando verrà scritto il file?
- Da quando verrà letto il file?
- Quale sarebbe la conseguenza se il file fosse corrotto o cancellato?
Soluzione
/path/to/mysql/data/[database]/[table].ibd (due to innodb_file_per_table)
Qui sono archiviati i tuoi dati. Vengono creati quando si creano le tabelle.
/path/to/mysql/data/data/ib_logfile0
/path/to/mysql/data/data/ib_logfile1
Questi sono file di log
.
Tutte le modifiche ai dati vengono scritte in sequenza nel file di log
, il che consente la registrazione write-ahead (fondamentale per le transazioni)
/path/to/mysql/data/data/ibdata1
Qui sono memorizzati i dati di sistema e i dati UNDO
.
Se ibdata
non viene trovato, MySQL
penserà che il motore InnoDB
non sia inizializzato e creerà semplicemente il nuovo ibdata
. Lo stesso con file di log
.
Se viene eseguita una query su una tabella e il file .ibd
non viene trovato, MySQL
non riuscirà con questo messaggio:
Impossibile trovare la tabella
database / table
dal dizionario dati interno diInnoDB
sebbene sia presente il file.frm
per la tabella. Forse hai eliminato e ricreato i file di datiInnoDB
ma hai dimenticato di eliminare i corrispondenti file.frm
delle tabelleInnoDB
, oppure tu hai spostato i file.frm
in un altro database?