To ibdata1
nezmenšuje se je zvláště nepříjemná vlastnost MySQL. ibdata1
soubor nelze ve skutečnosti zmenšit, pokud nesmažete všechny databáze, neodstraníte soubory a znovu nenačtete výpis.
MySQL ale můžete nakonfigurovat tak, aby každá tabulka včetně jejích indexů byla uložena jako samostatný soubor. Tímto způsobem ibdata1
nebude tak velký. Podle komentáře Billa Karwina toto je standardně povoleno od verze 5.6.6 MySQL.
Bylo to před chvílí, co jsem to udělal. Chcete-li však nastavit server tak, aby používal samostatné soubory pro každou tabulku, musíte změnit my.cnf
abyste to povolili:
[mysqld]
innodb_file_per_table=1
https://dev.mysql .com/doc/refman/5.6/en/innodb-file-per-table-tablespaces.html
Jak chcete získat zpět prostor z ibdata1
ve skutečnosti musíte soubor smazat:
- Proveďte
mysqldump
všech databází, procedur, spouštěčů atd. kroměmysql
aperformance_schema
databází - Zrušte všechny databáze kromě dvou výše uvedených databází
- Zastavit mysql
- Smažte
ibdata1
aib_log
soubory - Spustit mysql
- Obnovit z výpisu
Když spustíte MySQL v kroku 5, ibdata1
a ib_log
soubory budou znovu vytvořeny.
Nyní můžete jít. Když vytvoříte novou databázi pro analýzu, tabulky budou umístěny v samostatném ibd*
soubory, nikoli v ibdata1
. Jak obvykle zahodíte databázi brzy poté, ibd*
soubory budou smazány.
http://dev.mysql.com/doc/refman /5.1/cs/drop-database.html
Pravděpodobně jste viděli toto:
http://bugs.mysql.com /bug.php?id=1341
Pomocí příkazu ALTER TABLE <tablename> ENGINE=innodb
nebo OPTIMIZE TABLE <tablename>
lze extrahovat data a indexové stránky z ibdata1 do samostatných souborů. Nicméně ibdata1 se nezmenší, pokud neprovedete výše uvedené kroky.
Pokud jde o information_schema
, který není nutné ani možné shodit. Ve skutečnosti je to jen shluk pohledů pouze pro čtení, nikoli tabulky. A nejsou s nimi spojeny žádné soubory, dokonce ani adresář databáze. information_schema
používá paměťový db-engine a po zastavení/restartu mysqld je zrušen a regenerován. Viz https://dev.mysql.com/doc/ refman/5.7/en/information-schema.html
.