MySQL InnoDB не освобождает дисковое пространство после удаления строк данных из таблицы
У меня есть одна таблица MySQL с использованием механизма хранения InnoDB; она содержит около 2 м строк данных. Когда я удалил строки данных из таблицы, он не освободил выделенное дисковое пространство. Также размер файла ibdata1 не уменьшился после запуска .
есть ли способ освободить дисковое пространство от MySQL?
Я нахожусь в плохой ситуации; это приложение работает примерно в 50 разных местах, и теперь проблема низкого дискового пространства появляется почти на всех их.
5 ответов:
MySQL не уменьшает размер ibdata1. Когда-либо. Даже если вы используете
optimize tableчтобы освободить место от удаленных записей, он будет использовать позже.альтернативой является настройка сервера для использования
innodb_file_per_table, но для этого потребуется резервное копирование, удаление базы данных и восстановление. Положительная сторона заключается в том, что .ibd файл для таблицы уменьшается послеoptimize table.
просто у меня была такая же проблема.
Что происходит, что даже если вы отбросите базу данных, innodb все равно не освободит дисковое пространство. Мне пришлось экспортировать, остановить mysql, удалить файлы вручную, запустить mysql, создать базу данных и пользователей, а затем импортировать. Слава богу, у меня было только 200 МБ строк, но он пощадил 250 ГБ файла innodb.
сбой по дизайну.
Если вы не используете innodb_file_per_table, освобождение места на диске можно, но довольно утомительно и требует значительного количества времени простоя.
The Как довольно глубоко - но я вставил соответствующую часть ниже.
Не забудьте также сохранить копию схемы в дампе.
в настоящее время, вы не можете удалить файл данных из системной табличной области. Чтобы уменьшить размер системного табличного пространства, используйте это процедура:
используйте mysqldump для сброса всех ваших таблиц InnoDB.
остановить сервер.
удалите все существующие табличные файлы, включая ibdata и файлы ib_log. Если вы хотите сохранить резервную копию информации, затем скопируйте все файлы ib* в другое место перед удалением файлы в вашей установке MySQL.
удалить все .файлы frm для таблиц InnoDB.
настройки нового табличная область.
перезапустить сервер.
импорт файлов дампа.
другой способ решить проблему освобождения пространства-это создать несколько разделов в табличных диапазонах на основе разделов на основе значений и просто отбросить/усечь раздел, чтобы освободить пространство, которое освободит пространство, используемое целыми данными, хранящимися в конкретном разделе.
там будут какие-то изменения нужны в схеме таблицы, когда вы вводите перегородки для вашего стола, как - уникальные ключи, индексы для столбцов секционирования и т. д.
есть несколько способов восстановить дисковое пространство после удаления данных из таблицы для MySQL inodb engine
Если вы не используете innodb_file_per_table с самого начала, сброс всех данных, удаление всех файлов, воссоздание базы данных и повторный импорт данных-это единственный способ (проверьте ответы FlipMcF выше )
Если вы используете innodb_file_per_table, вы можете попробовать
- если вы можете удалить все данные команда усечения удалит данные и освободит дисковое пространство для вы.
- изменить команду таблица удалить и повторно создать таблицу, поэтому он может вернуть дискового пространства. Поэтому после удаления данных, выполните инструкцию Alter таблицы, ничего не изменится, чтобы освободить жесткий диск ( т. е.: таблица TBL_A имеет кодировку uf8, после удаления данных выполните инструкцию Alter таблица TBL_A кодировку в utf8> эта команда ничего не изменится от вашего стола, но это делают MySQL воссоздать свой стол и восстановить дискового пространства
- создать TBL_B как TBL_A . Вставьте выбранные данные, которые вы хотите сохранить из TBL_A в TBL_B. Drop TBL_A, и переименовать TBL_B в TBL_A. Этот способ является очень эффективным, если TBL_A и данные, которые требуется удалить большой (команда delete в MySQL InnoDB является очень плохой производительности)
Comments