Was genau sind iblog-Dateien in MySQL


15

Ich möchte diese ibdata-Dateien verstehen, da diese eine wichtige Rolle bei der Wiederherstellung nach einem Absturz spielen. Ich konnte über das Internet keine geeigneten Ressourcen dafür finden.

Antworten:


17

ibdata1

Die Datei ibdata1 ist der Systemtabellenbereich für die InnoDB-Infrastruktur.

Es enthält mehrere Informationsklassen, die für InnoDB von entscheidender Bedeutung sind

  • Tabellendatenseiten
  • Tabellenindex-Seiten
  • Datenwörterbuch
  • MVCC-Steuerdaten
    • Leerzeichen rückgängig machen
    • Rollback-Segmente
  • Doppelter Schreibpuffer (Seiten, die im Hintergrund geschrieben wurden, um das Zwischenspeichern des Betriebssystems zu vermeiden)
  • Puffer einfügen (Änderungen an Sekundärindizes)

Klicken Sie hier, um eine bildliche Darstellung zu sehen

Sie können Daten- und Indexseiten von ibdata1 trennen, indem Sie innodb_file_per_table aktivieren . Dadurch speichert jede neu erstellte InnoDB-Tabelle Daten und Indexseiten in einer externen .ibdDatei.

Beispiel

  • Datadir ist / var / lib / mysql
  • CREATE TABLE mydb.mytable (...) ENGINE=InnoDB;schafft /var/lib/mysql/mydb/mytable.frm
    • innodb_file_per_table aktiviert, Daten- / Indexseiten gespeichert in /var/lib/mysql/mydb/mytable.ibd
    • innodb_file_per_table deaktiviert, Daten- / Indexseiten in ibdata1 gespeichert

Unabhängig davon, wo die InnoDB-Tabelle gespeichert ist, muss die InnoDB-Funktionalität nach Tabellenmetadaten suchen und MVCC- Informationen speichern und abrufen , um die ACID-Konformität und die Transaktionsisolation zu unterstützen .

Hier sind meine früheren Artikel zum Trennen von Tabellendaten und Indizes von ibdata1

iblog files (aka ib_logfile0, ib_logfile1)

Wenn Sie wissen möchten, wofür ib_logfile0und ib_logfile1sind, sind dies die InnoDB Redo Logs. Sie sollten niemals gelöscht oder in der Größe verändert werden, bis ein vollständiges normales Herunterfahren von mysqld stattgefunden hat . Sollte mysqld jemals abstürzen, starten Sie mysqld einfach. Es liest über ib_logfile0und ib_logfile1überprüft, ob Datenänderungen vorliegen, die nicht in den Doppelschreibpuffer von gesendet wurden ibdata1. Diese Änderungen werden wiederholt (wiederholt). Sobald sie wiedergegeben und gespeichert wurden, ist mysqld bereit für neue DB-Verbindungen.


Wie wird der Speicherplatz in diesen Protokolldateien beibehalten ...? Ich meine zu fragen ... "für neue Innodb-Transaktionen, wie die gleichen Protokolldateien verwendet werden, wenn diese vollständig gefüllt sind ...."
Uday

Mein vorheriger Kommentar handelt von ib_log-Dateien ....
Uday

1
@ Uday Der Speicherplatz wird in den iblog-Dateien nicht beibehalten, bis der Protokollpuffer leer wird. Es ist ein dynamischer Prozess, bei dem der Protokollspeicherplatz basierend auf den festgefahrenen Transaktionsänderungen, die im Protokollpuffer aufgezeichnet wurden, belegt und freigegeben wird. Diese Protokolldateien werden immer dann vollständig belegt, wenn große Datenmengen geladen werden. Dies führt zu Innodb-Fehlern mit der Angabe "InnoDB: Die Kapazität der Protokollgruppe überschreitet". Dies bedeutet, dass die Protokolldatei größer sein sollte, um bestimmte Aufgaben ausführen zu können. Ich hoffe, meine Erklärung hat Ihren Zweifel ausgeräumt.
Gopinath

innodb_file_per_table disabled, Data/Index Pages Stored in /var/lib/mysql/mydb/mytable.ibdund innodb_file_per_table enbled, Data/Index Pages Stored in ibdata1sollte umgekehrt sein, nicht wahr?
Rabudde

1
@ Rabudde Es ist jetzt behoben. Danke nochmal !!!
RolandoMySQLDBA
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.