Ce este fișierul ibdata1 din directorul meu /var/lib/mysql? (Administrarea sistemului, Mysql, Ubuntu 12.04, Depanare, Întreținere)

James a intrebat.
a intrebat.

Intrând în panoul meu de control Webmin, am observat că practic tot spațiul pe disc este plin. Am căutat cele mai mari zece fișiere/ directoare de pe sistemul meu și am constatat că un fișier numit ibdata1 ocupă aproximativ 94 GB de spațiu. Acesta se află în directorul meu /var/lib/mysql.

Ce face ibdata1? Pot să îl elimin în siguranță? Presupunerea mea este că este un fel de vidanjă, dar asta este doar o presupunere sălbatică.

3 răspunsuri
RolandoMySQLDBA

Fișierul ibdata1 este tablespace-ul de sistem pentru infrastructura InnoDB.

Acesta conține mai multe clase pentru informații vitale pentru InnoDB

  • Pagini de date de tabel
  • Table Index Pages
  • Dicționar de date
  • Date de control MVCC
    • Undo Space
    • Segmente de revenire
  • Double Write Buffer (pagini scrise în fundal pentru a evita memoria cache a sistemului de operare)
  • Buffer de inserție (modificări ale indexurilor secundare)

Vă rugăm să rețineți locul lui ibdata1 în universul InnoDB (în partea dreaptă)

Puteți separa paginile de date și de index din ibdata1 prin activarea innodb_file_per_table. Acest lucru va face ca orice tabel InnoDB nou creat să stocheze paginile de date și de index într-un fișier extern .ibd fișier extern.

Exemplu

  • datadir este /var/lib/mysql
  • CREATE TABLE mydb.mytable (...) ENGINE=InnoDB;, creează /var/lib/mysql/mydb/mytable.frm
    • innodb_file_per_table activat, Pagini de date/index stocate în /var/lib/mysql/mydb/mytable.ibd
    • innodb_file_per_table dezactivat, pagini de date/indice stocate în ibdata1

Indiferent unde este stocat tabelul InnoDB, funcționalitatea InnoDB necesită căutarea metadatelor tabelului și stocarea și recuperarea MVCC info pentru a sprijini conformitatea ACID și izolarea tranzacțiilor.

Iată articolele mele anterioare privind separarea datelor de tabel și a indexurilor din ibdata1

  • Oct 29, 2010 : Postarea mea originală în StackOverflow
  • Nov 26, 2011 : ERROR 1114 (HY000) la linia 6308 în fișierul & Tabelul user_analysis este plin
  • Feb 03, 2012 : Optimizarea programată a tabelelor în MySQL InnoDB
  • Mar 25, 2012 : De ce InnoDB stochează toate bazele de date într-un singur fișier?
  • Apr 01, 2012 : Este recomandabil innodb_file_per_table?

CE TREBUIE FĂCUT ÎN CONTINUARE

Puteți continua să aveți ibdata1 stocat totul, dar asta face ca realizarea de instantanee LVM să fie o adevărată corvoadă (părerea mea personală).

Trebuie să folosiți postarea mea de pe StackOverflow și să micșorați permanent acel fișier.

Vă rugăm să rulați această interogare:

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;

Aceasta vă va spune cât de mult spațiu irosit poate fi recuperat după aplicarea InnoDB Cleanup.

Comentarii

  • Vă mulțumim pentru contribuția dumneavoastră. Cota mea de disc s-a umplut între timp complet – înainte de a acționa conform sfaturilor din posturile dvs., voi avea nevoie de spațiu liber? Am observat că postarea dvs. originală pe SO menționează despre efectuarea unui SQL dump, dar acest lucru ar crea, probabil, un fișier de ~90GB fără a avea unde să se ducă. –  > Por James.
  • mysqldump va fi doar reprezentarea logică a paginilor de date, nu și a indexurilor. Veți avea nevoie de o altă montare pe disc, poate un server la distanță, pentru a descărca datele. –  > Por RolandoMySQLDBA.
  • Pentru mine, returnează 91.25350952148438 ca SpaceToReclaim. Este în megabytes? procente? bytes? –  > Por Isaac.
  • Știu că este prea vechi. Dar pentru oricine vine aici cu această problemă, trebuie să înlocuiți numărul 94 cu orice dimensiune a fișierului dvs. ibdata1 în GB și numărul SpaceToReclaim vă va da dimensiunea în GB. –  > Por anupsabraham.
Michael Hampton

Acest fișier este ibdata1, nu ibdatal și conține toate bazele tale de date InnoDB. Dacă îl ștergi, îți pierzi toate datele.

Pentru câteva idei despre cum să vă ocupați de el, consultați Cum să micșorați/purtați fișierul ibdata1 în MySQL.

silviud

Dacă folosiți innodb ca motor MySQL în mod implicit va stoca toate bazele dvs. de date în ibdata1. De asemenea, există fișiere de jurnal ib_logfile0 și ib_logfile1. Nu ștergeți aceste fișiere.

Comentarii

  • Ce înseamnă ștergerea acelui fișier de pe serverul meu? –  > Por Frank.