Dat ibdata1
niet krimpt is een bijzonder vervelende eigenschap van MySQL. De ibdata1
bestand kan niet worden verkleind, tenzij u alle databases verwijdert, de bestanden verwijdert en een dump opnieuw laadt.
Maar u kunt MySQL zo configureren dat elke tabel, inclusief de indexen, als een apart bestand wordt opgeslagen. Op die manier ibdata1
zal niet zo groot worden. Volgens de opmerking van Bill Karwin dit is standaard ingeschakeld vanaf versie 5.6.6 van MySQL.
Het is alweer een tijdje geleden dat ik dit deed. Als u uw server echter wilt instellen om voor elke tabel afzonderlijke bestanden te gebruiken, moet u my.cnf
wijzigen om dit in te schakelen:
[mysqld]
innodb_file_per_table=1
https://dev.mysql .com/doc/refman/5.6/en/innodb-file-per-table-tablespaces.html
Omdat u de ruimte van ibdata1
. wilt terugwinnen je moet het bestand eigenlijk verwijderen:
- Doe een
mysqldump
van alle databases, procedures, triggers etc behalve demysql
enperformance_schema
databases - Alle databases verwijderen behalve de bovenstaande 2 databases
- Stop mysql
- Verwijder
ibdata1
enib_log
bestanden - Start mysql
- Herstellen vanaf dump
Wanneer u MySQL start in stap 5, wordt de ibdata1
en ib_log
bestanden worden opnieuw gemaakt.
Nu ben je fit om te gaan. Wanneer u een nieuwe database voor analyse aanmaakt, worden de tabellen in aparte ibd*
geplaatst bestanden, niet in ibdata1
. Omdat u de database gewoonlijk kort daarna laat vallen, wordt de ibd*
bestanden worden verwijderd.
http://dev.mysql.com/doc/refman /5.1/nl/drop-database.html
Je hebt waarschijnlijk dit gezien:
http://bugs.mysql.com /bug.php?id=1341
Met behulp van het commando ALTER TABLE <tablename> ENGINE=innodb
of OPTIMIZE TABLE <tablename>
men kan gegevens en indexpagina's uit ibdata1 extraheren om bestanden te scheiden. ibdata1 zal echter niet krimpen tenzij u de bovenstaande stappen uitvoert.
Over het information_schema
, dat is niet nodig en ook niet mogelijk om te laten vallen. Het zijn in feite gewoon een aantal alleen-lezen weergaven, geen tabellen. En er zijn geen bestanden aan gekoppeld, zelfs geen databasedirectory. Het informations_schema
gebruikt de geheugen-db-engine en wordt verwijderd en opnieuw gegenereerd bij het stoppen/herstarten van mysqld. Zie https://dev.mysql.com/doc/ refman/5.7/en/information-schema.html
.