Я импортировал дамп базы данных - почти 1 ГБ:
mysql -uroot -ppassword < mysqldump.sql
Когда я получил предупреждение о том, что жесткий диск почти заполнен. Я запаниковал и нажал Ctrl-C на импорте. Дважды.
Глядя на свою БД, я вижу, что импорт был отменен. Однако когда я смотрю в /var/lib/mysql/
я могу видеть ibdata1
все еще слишком велик - я думаю, в нем все еще есть все импортированные данные. Это примерно в два раза больше, чем должно быть для данных, доступных в БД.
Я побежал mysqlcheck -optimize -A
но во всяком случае это сделало ibdata1
файл большего размера.
Как я могу удалить эти потерянные данные? У меня на жестком диске осталось около 100МБ ...
Это известная ошибка MySQL: 1341. Это продолжается уже 8 лет. Вы можете попробовать обходной путь, опубликовано на StackOverflow:
Который ibdata1
не сжимается - особенно неприятная особенность MySQL. В ibdata1
файл не может быть сокращен, если вы не удалите все базы данных, файлы и перезагрузите дамп.
Но вы можете настроить MySQL так, чтобы каждая таблица, включая ее индексы, хранилась как отдельный файл. Таким образом ibdata1
не станет таким большим.
Это было некоторое время назад. Однако, чтобы настроить сервер для использования отдельных файлов для каждой таблицы, вам необходимо изменить my.cnf
чтобы включить это:
[mysqld]
innodb_file_per_table=1
http://dev.mysql.com/doc/refman/5.5/en/multiple-tablespaces.html
Как вы хотите освободить пространство от ibdata1
вам действительно нужно удалить файл:
mysqldump
всех баз данных, процедур, триггеров и т. д.ibdata1
и ib_log
файлыКогда вы запускаете MySQL на шаге 5, ibdata1
и ib-log
файлы будут созданы заново.
Теперь ты готов к работе. При создании новой базы данных для анализа таблицы будут располагаться в отдельных ibd*
файлы, а не в ibdata1
. Поскольку вы обычно удаляете базу данных вскоре после этого, ibd*
файлы будут удалены.
http://dev.mysql.com/doc/refman/5.1/en/drop-database.html
Или, если вы хотите, чтобы база данных работала, пока вы это делаете, вы можете попробовать следующее:
Включите опцию innodb_file_per_table, не закрывая базу данных. Идея такая: