То, что 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/en/innodb-multiple-tablespaces.html
Поскольку вы хотите освободить место из ibdata1
, вам действительно нужно удалить файл:
- Выполните
mysqldump
всех баз данных, процедур, триггеров и т. Д. , за исключением mysql
и performance_schema
баз данных
- Отбросить все базы данных , за исключением двух вышеуказанных баз данных
- Стоп 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/en/information-schema.html.