sql >> Databasteknik >  >> RDS >> Mysql

Hur man krymper/rensar ibdata1-fil i MySQL

Den där ibdata1 krymper inte är en särskilt irriterande funktion i MySQL. ibdata1 fil kan faktiskt inte krympas om du inte tar bort alla databaser, tar bort filerna och laddar om en dump.

Men du kan konfigurera MySQL så att varje tabell, inklusive dess index, lagras som en separat fil. På det sättet ibdata1 kommer inte att växa lika stor. Enligt Bill Karwins kommentar detta är aktiverat som standard från och med version 5.6.6 av MySQL.

Det var ett tag sedan jag gjorde detta. Men för att ställa in din server att använda separata filer för varje tabell måste du ändra my.cnf för att aktivera detta:

[mysqld]
innodb_file_per_table=1

https://dev.mysql .com/doc/refman/5.6/en/innodb-file-per-table-tablespaces.html

När du vill återta utrymmet från ibdata1 du måste faktiskt ta bort filen:

  1. Gör en mysqldump av alla databaser, procedurer, triggers etc utom mysql och performance_schema databaser
  2. Släpp alla databaser utom de två ovanstående databaserna
  3. Stoppa mysql
  4. Ta bort ibdata1 och ib_log filer
  5. Starta mysql
  6. Återställ från dump

När du startar MySQL i steg 5 visas ibdata1 och ib_log filer kommer att återskapas.

Nu är du redo att gå. När du skapar en ny databas för analys kommer tabellerna att finnas i separata ibd* filer, inte i ibdata1 . Eftersom du vanligtvis släpper databasen strax efter, visas ibd* filer kommer att raderas.

http://dev.mysql.com/doc/refman /5.1/sv/drop-database.html

Du har förmodligen sett detta:
http://bugs.mysql.com /bug.php?id=1341

Genom att använda kommandot ALTER TABLE ENGINE=innodb eller OPTIMERA TABELL man kan extrahera data och indexera sidor från ibdata1 till separata filer. Men ibdata1 kommer inte att krympa om du inte gör stegen ovan.

Angående informationsschemat , som inte är nödvändigt eller möjligt att släppa. Det är faktiskt bara ett gäng skrivskyddade vyer, inte tabeller. Och det finns inga filer associerade med dem, inte ens en databaskatalog. informationsschema använder minnesdb-motorn och släpps och återskapas vid stopp/omstart av mysqld. Se https://dev.mysql.com/doc/ refman/5.7/en/information-schema.html .



  1. Hur man implementerar prioriteringar i SQL (postgres)

  2. Komma igång med PostgreSQL Streaming Replication

  3. Hur hanterar man ett valfritt värde som returneras av en fråga med postgres-lådan?

  4. Anslut till mysql i en dockningsbehållare från värden