восстановление Как сжать / очистить файл ibdata1 в MySQL




4 Answers

Когда вы удаляете таблицы innodb, MySQL не освобождает пространство внутри файла ibdata, поэтому он продолжает расти. Эти файлы почти никогда не сокращаются.

Как сжать существующий файл ibdata:

http://dev.mysql.com/doc/refman/5.5/en/innodb-resize-system-tablespace.html

Вы можете создать сценарий и запланировать запуск сценария через определенный промежуток времени, но для описанной выше настройки кажется, что несколько табличных пространств являются более простым решением.

Если вы используете параметр конфигурации innodb_file_per_table , вы создаете несколько табличных пространств. То есть MySQL создает отдельные файлы для каждой таблицы вместо одного общего файла. Эти отдельные файлы хранятся в каталоге базы данных и удаляются при удалении этой базы данных. Это должно устранить необходимость сокращения / очистки файлов ibdata в вашем случае.

Дополнительная информация о нескольких табличных пространствах:

http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html

mysql ibdata1 очистить

Я использую MySQL в localhost как «инструмент запроса» для выполнения статистики в R, то есть каждый раз, когда я запускаю R-скрипт, я создаю новую базу данных (A), создаю новую таблицу (B), импортирую данные в B , отправьте запрос, чтобы получить то, что мне нужно, а затем я опускаю B и бросаю A.

Он отлично работает для меня, но я понимаю, что размер файла ibdata быстро растет, я ничего не хранил в MySQL, но файл ibdata1 уже превысил 100 МБ.

Я использую больше или меньше настроек MySQL по умолчанию для установки, есть ли способ, чтобы я мог автоматически сжимать / очищать файл ibdata1 через определенный период времени?




Если вы используете механизм хранения InnoDB для (некоторых) ваших таблиц MySQL, вы, вероятно, уже столкнулись с проблемой с настройкой по умолчанию. Как вы могли заметить в каталоге данных MySQL (в Debian / Ubuntu - / var / lib / mysql) находится файл с именем ibdata1. Он содержит почти все данные InnoDB (это не журнал транзакций) экземпляра MySQL и может стать довольно большим. По умолчанию этот файл имеет начальный размер 10 Мб, и он автоматически расширяется. К сожалению, по дизайну файлы данных InnoDB нельзя сжимать. Вот почему DELETE, TRUNCATE, DROP и т. Д. Не будут возвращать пространство, используемое файлом.

Я думаю, вы можете найти хорошее объяснение и решение там:

http://vdachev.net/2007/02/22/mysql-reducing-ibdata1/




В новой версии рецептов mysql-сервера выше будет раздавлена ​​база данных «mysql». В старой версии он работает. В новых таблицах переключается на тип таблицы INNODB, и при этом вы будете наносить им ущерб. Самый простой способ - сбросить все ваши базы данных, удалить mysql-сервер, добавить в оставшийся my.cnf:

[mysqld]
innodb_file_per_table=1


erase all in /var/lib/mysql
install mysql-server
restore users and databases



Как уже отмечалось, вы не можете сжимать ibdata1 (для этого вам нужно сбрасывать и перестраивать), но также часто нет необходимости.

Использование autoextend (возможно, наиболее распространенного размера) ibdata1 предопределяет хранение, увеличиваясь каждый раз, когда он почти заполнен. Это делает записи быстрее, поскольку пространство уже выделено.

Когда вы удаляете данные, он не уменьшается, но пространство внутри файла помечено как неиспользуемое. Теперь, когда вы вставляете новые данные, он будет повторно использовать пустое пространство в файле, прежде чем расширять файл.

Таким образом, он будет продолжать расти только в том случае, если вам действительно нужны эти данные. Если вам действительно не нужно место для другого приложения, вероятно, нет причин его сжимать.




Related