Den ibdata1
krymper ikke er et særligt irriterende træk ved MySQL. ibdata1
fil kan faktisk ikke krympes, medmindre du sletter alle databaser, fjerner filerne og genindlæser et dump.
Men du kan konfigurere MySQL, så hver tabel, inklusive dens indekser, gemmes som en separat fil. På den måde ibdata1
vil ikke vokse sig så stor. Ifølge Bill Karwins kommentar dette er aktiveret som standard fra version 5.6.6 af MySQL.
Det er et stykke tid siden, jeg gjorde dette. Men for at konfigurere din server til at bruge separate filer for hver tabel, skal du ændre my.cnf
for at aktivere dette:
[mysqld]
innodb_file_per_table=1
https://dev.mysql .com/doc/refman/5.6/en/innodb-file-per-table-tablespaces.html
Som du vil genvinde pladsen fra ibdata1
du skal faktisk slette filen:
- Foretag en
mysqldump
af alle databaser, procedurer, triggere osv. undtagenmysql
ogperformance_schema
databaser - Slet alle databaser undtagen de 2 ovenstående databaser
- Stop mysql
- Slet
ibdata1
ogib_log
filer - Start mysql
- Gendan fra dump
Når du starter MySQL i trin 5, vises ibdata1
og ib_log
filer vil blive genskabt.
Nu er du klar til at gå. Når du opretter en ny database til analyse, vil tabellerne blive placeret i separat ibd*
filer, ikke i ibdata1
. Som du normalt dropper databasen kort efter, vil ibd*
filer vil blive slettet.
http://dev.mysql.com/doc/refman /5.1/da/drop-database.html
Du har sikkert set dette:
http://bugs.mysql.com /bug.php?id=1341
Ved at bruge kommandoen ALTER TABLE
eller OPTIMER TABEL
Angående informationsskemaet
, det er ikke nødvendigt eller muligt at droppe. Det er faktisk bare en masse skrivebeskyttede visninger, ikke tabeller. Og der er ingen filer forbundet med dem, ikke engang en databasemappe. informationsskemaet
bruger hukommelsen db-motoren og droppes og regenereres ved stop/genstart af mysqld. Se https://dev.mysql.com/doc/ refman/5.7/da/information-schema.html
.