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
mysqldump
av alla databaser, procedurer, triggers etc utommysql
ochperformance_schema
databaser - Släpp alla databaser utom de två ovanstående databaserna
- Stoppa mysql
- Ta bort
ibdata1
ochib_log
filer - 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.
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
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
.