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:
- Gör en
mysqldumpav alla databaser, procedurer, triggers etc utommysqlochperformance_schemadatabaser - Släpp alla databaser utom de två ovanstående databaserna
- Stoppa mysql
- Ta bort
ibdata1ochib_logfiler - Starta mysql
- Å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.
https://dev.mysql.com/doc/refman /5.1/sv/drop-database.html
Du har förmodligen sett detta:
https://bugs.mysql.com /bug.php?id=1341
Genom att använda kommandot ALTER TABLE eller OPTIMERA TABELL
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
.