sql >> Databáze >  >> RDS >> Mysql

Jak zmenšit/vymazat soubor ibdata1 v MySQL

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:

  1. Proveďte mysqldump všech databází, procedur, spouštěčů atd. kromě mysql a performance_schema databází
  2. Zrušte všechny databáze kromě dvou výše uvedených databází
  3. Zastavit mysql
  4. Smažte ibdata1 a ib_log soubory
  5. Spustit mysql
  6. 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 .



  1. Jak Acosd() funguje v PostgreSQL

  2. Používání heterogenních služeb Oracle® se dvěma zdroji dat ODBC

  3. Pomocí sp_help_jobschedule v SQL Server

  4. Implementace přírůstkového zatížení pomocí Change Data Capture v SQL Server