Це ibdata1не зменшується - це особливо дратівлива особливість MySQL. ibdata1Файл фактично не може бути зменшений , якщо ви не видалите всі бази даних, видаліть файли і перезавантажте дамп.
Але ви можете налаштувати MySQL так, що кожна таблиця, включаючи її індекси, зберігається як окремий файл. Таким чином ibdata1не виросте настільки великим. Відповідно до коментаря Білла Карвіна, це ввімкнено за замовчуванням у версії 5.6.6 MySQL.
Деякий час тому я це робив. Однак, щоб налаштувати ваш сервер, щоб використовувати окремі файли для кожної таблиці, яку потрібно змінити my.cnf, щоб увімкнути це:
[mysqld]
innodb_file_per_table=1
http://dev.mysql.com/doc/refman/5.5/uk/innodb-multiple-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, що не потрібно і не можна кидати. Це насправді лише купа переглядів лише для читання, а не таблиць. І жодних файлів, пов’язаних з ними, немає навіть каталогу баз даних. При цьому informations_schemaвикористовується db-двигун пам'яті і скидається та регенерується при зупинці / перезапуску mysqld. Дивіться https://dev.mysql.com/doc/refman/5.7/uk/information-schema.html .