Cosa sono esattamente i file iblog in mysql


15

Mi piacerebbe capire questi file ibdata in quanto svolgono un ruolo vitale nella procedura di recupero da crash. Non sono riuscito a trovare risorse adeguate sul Web per questo.

Risposte:


17

ibdata1

Il file ibdata1 è il tablespace di sistema per l'infrastruttura InnoDB.

Contiene diverse classi per informazioni vitali per InnoDB

  • Pagine dei dati della tabella
  • Pagine indice delle tabelle
  • Dizionario dei dati
  • Dati di controllo MVCC
    • Annulla spazio
    • Segmenti di rollback
  • Doppio buffer di scrittura (pagine scritte in background per evitare la memorizzazione nella cache del sistema operativo)
  • Inserisci buffer (modifiche agli indici secondari)

Clicca qui per vedere una rappresentazione pittorica

Puoi divorziare da Pagine di dati e indici da ibdata1 abilitando innodb_file_per_table . Ciò farà sì che qualsiasi tabella InnoDB appena creata memorizzi i dati e indicizzi le pagine in un .ibdfile esterno .

Esempio

  • il datadir è / var / lib / mysql
  • CREATE TABLE mydb.mytable (...) ENGINE=InnoDB;, crea /var/lib/mysql/mydb/mytable.frm
    • innodb_file_per_table abilitato, pagine dati / indice archiviate in /var/lib/mysql/mydb/mytable.ibd
    • innodb_file_per_table disabilitato, Pagine dati / indice archiviate in ibdata1

Indipendentemente da dove sia archiviata la tabella InnoDB, la funzionalità di InnoDB richiede la ricerca di metadati della tabella e la memorizzazione e il recupero delle informazioni MVCC per supportare la conformità ACID e l' isolamento delle transazioni .

Ecco i miei precedenti articoli sulla separazione dei dati e degli indici delle tabelle da ibdata1

iblog files (aka ib_logfile0, ib_logfile1)

Se vuoi sapere a cosa servono ib_logfile0e ib_logfile1sono i registri di ripristino di InnoDB. Non dovrebbero mai essere cancellati o ridimensionati fino a quando non si è verificato un arresto normale completo di mysqld . Se mysqld si arresta in modo anomalo, basta avviare mysqld. Leggerà ib_logfile0e ib_logfile1verificherà eventuali modifiche ai dati che non sono state registrate nel doppio buffer di scrittura ibdata1. Ripeterà (ripristinerà) quei cambiamenti. Una volta riprodotti e archiviati, mysqld diventa pronto per le nuove connessioni DB.


Come verrà mantenuto lo spazio in questi file di registro ...? Intendo chiedere ... "per nuove transazioni innodb come utilizzare gli stessi file di registro se questi sono stati riempiti completamente ..."
Uday

Il mio commento precedente riguarda i file ib_log ....
Uday

1
@ Uday Lo spazio non verrà conservato nei file iblog fino a quando il logbuffer non sarà vuoto. È un processo dinamico, in cui lo spazio del registro viene occupato e rilasciato in base alle modifiche della transazione bloccate registrate nel buffer del registro. Questi file di registro vengono occupati completamente, ogni volta che si eseguono enormi carichi di dati, il che porta a errori Innodb che affermano "InnoDB: che supera la capacità del gruppo di registri". Il che significa che la dimensione del file di registro dovrebbe essere maggiore per fare le cose. Spero che la mia spiegazione abbia chiarito i tuoi dubbi.
Gopinath,

innodb_file_per_table disabled, Data/Index Pages Stored in /var/lib/mysql/mydb/mytable.ibde innodb_file_per_table enbled, Data/Index Pages Stored in ibdata1dovrebbe essere viceversa, no?
rabudde,

1
@rabudde Ora è stato risolto. Grazie ancora !!!
RolandoMySQLDBA,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.