Това ibdata1
не се свива е особено досадна характеристика на MySQL. ibdata1
файлът всъщност не може да се свие, освен ако не изтриете всички бази данни, премахнете файловете и презаредите дъмп.
Но можете да конфигурирате MySQL така, че всяка таблица, включително нейните индекси, да се съхранява като отделен файл. По този начин ibdata1
няма да нарасне толкова голям. Според коментар на Бил Карвин a> това е активирано по подразбиране от версия 5.6.6 на MySQL.
Преди време направих това. Въпреки това, за да настроите сървъра си да използва отделни файлове за всяка таблица, трябва да промените my.cnf
за да активирате това:
[mysqld]
innodb_file_per_table=1
https://dev.mysql .com/doc/refman/5.6/en/innodb-file-per-table-tablespaces.html
Тъй като искате да възстановите пространството от ibdata1
всъщност трябва да изтриете файла:
- Направете
mysqldump
на всички бази данни, процедури, тригери и т.н. с изключение наmysql
иperformance_schema
бази данни - Изхвърлете всички бази данни с изключение на горните 2 бази данни
- Спри mysql
- Изтрийте
ibdata1
иib_log
файлове - Стартирайте mysql
- Възстановяване от дъмп
Когато стартирате MySQL в стъпка 5, ibdata1
и ib_log
файловете ще бъдат пресъздадени.
Сега сте готови да тръгнете. Когато създадете нова база данни за анализ, таблиците ще бъдат разположени в отделен ibd*
файлове, а не в ibdata1
. Както обикновено изтривате базата данни скоро след това, ibd*
файловете ще бъдат изтрити.
http://dev.mysql.com/doc/refman /5.1/en/drop-database.html
Вероятно сте виждали това:
http://bugs.mysql.com /bug.php?id=1341
С помощта на командата ALTER TABLE <tablename> ENGINE=innodb
или OPTIMIZE TABLE <tablename>
човек може да извлича данни и индексиращи страници от ibdata1 в отделни файлове. Въпреки това, ibdata1 няма да се свие, освен ако не изпълните стъпките по-горе.
Относно information_schema
, това не е необходимо, нито е възможно да се откаже. Всъщност това е просто куп изгледи само за четене, а не таблици. И няма файлове, свързани с тях, дори директория на база данни. information_schema
използва db-двигателя на паметта и се изтрива и регенерира при спиране/рестартиране на mysqld. Вижте https://dev.mysql.com/doc/ refman/5.7/en/information-schema.html
.