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


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

Question

Я использую 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