Che cos'è il file ibdata1 nella mia directory / var / lib / mysql?

Accedendo al mio pannello di controllo Webmin, ho notato che quasi tutto il mio spazio su disco è pieno. Ho cercato i dieci file / directory più grandi del mio sistema e ho scoperto che un file chiamato ibdata1 sta occupando circa 94 GB di spazio. Esso risiede nella mia directory / var / lib / mysql.

Cosa fa ibdata1? Sono sicuro di rimuoverlo? La mia ipotesi è che sia un discarico di qualche tipo, ma è solo una indovinata ipotesi.

3 Solutions collect form web for “Che cos'è il file ibdata1 nella mia directory / var / lib / mysql?”

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

Contiene diverse classi per informazioni vitali per InnoDB

  • Pagine di dati di tabella
  • Pagine di indice di tabella
  • Dizionario dati
  • Dati di controllo MVCC
    • Annulla lo spazio
    • Segmenti di rollback
  • Doppio buffer di scrittura (pagine scritte in background per evitare la memorizzazione del sistema operativo)
  • Buffer di inserimento (modifiche agli indici secondari)

Si prega di notare il posto di ibdata1 nell'InnoDB Universe (sul lato destro)

InnoDB Architettura

È ansible separare le pagine di dati e indice da ibdata1 abilitando innodb_file_per_table . Ciò causerà qualsiasi tabella InnoDB appena creata per memorizzare le pagine di dati e indice in un file .ibd esterno.

Esempio

  • datadir è / var / lib / mysql
  • CREATE TABLE mydb.mytable (...) ENGINE=InnoDB; , crea /var/lib/mysql/mydb/mytable.frm
    • innodb_file_per_table abilitato, Pagine di dati / indici memorizzati in /var/lib/mysql/mydb/mytable.ibd
    • innodb_file_per_table distriggersto, Pagine di dati / indici memorizzati in ibdata1

Non import where la tabella InnoDB è memorizzata, la funzionalità di InnoDB richiede la ricerca di metadati di tabella e la memorizzazione e il recupero di informazioni MVCC per supportre la conformità ACID e la Transaction Isolation .

Ecco i miei articoli precedenti sul separare i dati della tabella e gli indici da ibdata1

  • Oct 29, 2010 : Il mio post originale in StackOverflow
  • Nov 26, 2011 : ERRORE 1114 (HY000) alla row 6308 in file & La tabella user_analysis è piena
  • Feb 03, 2012 : Ottimizzazione pianificata di tabelle in MySQL InnoDB
  • Mar 25, 2012 : Perché InnoDB memorizza tutti i database in un unico file?
  • Apr 01, 2012 : è innodb_file_per_table consigliabile?

COSA FARE DOPO

È ansible continuare ad avere ibdata1 memorizzati tutto, ma questo rende le istantanee LVM una vera fatica (il mio parere personale).

È necessario utilizzare il mio tree StackOverflow e ridurre il file in modo permanente.

Esegui questa domanda:

 SELECT ((POWER(1024,3)*94 - InnoDBDiskDataAndIndexes))/POWER(1024,3) SpaceToReclaim FROM (SELECT SUM(data_length+index_length) InnoDBDiskDataAndIndexes FROM information_schema.tables WHERE engine='InnoDB') A; 

Ciò spiega come lo spazio sprecato può essere recuperato dopo l'applicazione del Cleanup InnoDB.

Questo file è ibdata1 , non ibdatal e contiene tutti i database InnoDB. Se lo elimina, perdi tutti i tuoi dati.

Per alcune idee su come gestirlo , vedere Come ridurre / eliminare il file ibdata1 in MySQL .

Se usi innodb come motore MySQL per impostazione predefinita, memorizzerai tutti i database in ibdata1. Ci sono anche file di log ib_logfile0 e ib_logfile1. Non eliminare questi file.

Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.