Änderungen an einer MySQL InnoDB-Tabelle - die Dateien sind betroffen, und warum?
-
05-07-2019 - |
Frage
Wenn Sie den Inhalt einer InnoDB MySQL-Tabelle Ändern Sie die folgenden Dateien auf dem Dateisystem erscheint einbezogen werden / geändert:
-
/path/to/mysql/data/[database]/[table].ibd
(wegeninnodb_file_per_table
) -
/path/to/mysql/data/data/ib_logfile0
-
/path/to/mysql/data/data/ib_logfile1
-
/path/to/mysql/data/data/ibdata1
Für jede dieser Dateien:
- Wenn die Datei erstellt?
- Wann wird die Datei geschrieben werden?
- Wann wird die Datei aus gelesen werden?
- Was die Folge sein würde, wenn die Datei beschädigt oder gelöscht ist?
Lösung
/path/to/mysql/data/[database]/[table].ibd (due to innodb_file_per_table)
Dies ist, wo Sie die Daten gespeichert sind. Sie entstehen, wenn die Tabellen erstellen.
/path/to/mysql/data/data/ib_logfile0
/path/to/mysql/data/data/ib_logfile1
Dies sind logfiles
.
Alle Datenänderungen in die logfiles
sequentiell geschrieben werden, die Write-Ahead ermöglicht Protokollierung (entscheidend für Transaktionen)
/path/to/mysql/data/data/ibdata1
Dies ist, wo Systemdaten und UNDO
Daten gespeichert werden.
Wenn ibdata
nicht gefunden wird, wird MySQL
denken, dass InnoDB
Motor nicht initialisiert und gerade die neue ibdata
erstellen. Das Gleiche gilt für logfiles
.
Wenn eine Abfrage für eine Tabelle ausgegeben wird, und .ibd
Datei nicht gefunden wird, MySQL
wird mit dieser Meldung fehlschlagen:
Tabelle kann nicht
database/table
aus dem internen Datenwörterbuch vonInnoDB
obwohl die.frm
-Datei für die Tabelle vorhanden finden. Vielleicht haben Sie gelöscht undInnoDB
Datendateien neu erstellt, sondern haben die entsprechenden.frm
Dateien vonInnoDB
Tabellen löschen vergessen, oder Sie.frm
Dateien in einer anderen Datenbank verschoben hat?