Что такое файл ibdata1 в моем каталоге / var / lib / mysql?
32
Зайдя в панель управления Webmin, я заметил, что практически все мое дисковое пространство заполнено. Я искал десять самых больших файлов / каталогов в моей системе и обнаружил, что файл с именем ibdata1 занимает около 94 ГБ пространства. Он находится в моем / var / lib / mysql каталоге.
Что делает ibdata1? Я в безопасности, чтобы удалить это? Я предполагаю, что это какая-то свалка, но это просто дикая догадка.
Файл ibdata1является системным табличным пространством для инфраструктуры InnoDB.
Он содержит несколько классов для информации, жизненно важной для InnoDB
Страницы табличных данных
Таблицы указателей страниц
Словарь с данными
Контрольные данные MVCC
Отменить пространство
Откат сегментов
Двойной буфер записи (страницы, написанные в фоновом режиме, чтобы избежать кэширования ОС)
Вставить буфер (изменения во вторичные индексы)
Обратите внимание на место ibdata1 во вселенной InnoDB (справа)
Вы можете отделить страницы данных и индексов ibdata1, включив innodb_file_per_table . Это приведет к тому, что любая вновь созданная таблица InnoDB будет хранить данные и индексные страницы во внешнем .ibdфайле.
innodb_file_per_table включен, страницы данных / индекса хранятся в /var/lib/mysql/mydb/mytable.ibd
innodb_file_per_table отключен, страницы данных / индексов хранятся в ibdata1
Независимо от того, где хранится таблица InnoDB, функциональные возможности InnoDB требуют поиска метаданных таблицы, а также сохранения и извлечения информации MVCC для поддержки соответствия ACID и изоляции транзакции .
Вот мои прошлые статьи по отделению табличных данных и индексов от ibdata1
Вы можете продолжать хранить в ibdata1 все, но это делает создание снимков LVM настоящим трудоемким делом (мое личное мнение).
Вам нужно использовать мой пост StackOverflow и окончательно сжать этот файл.
Пожалуйста, запустите этот запрос:
SELECT
((POWER(1024,3)*94 - InnoDBDiskDataAndIndexes))/POWER(1024,3) SpaceToReclaim
FROM
(SELECT SUM(data_length+index_length) InnoDBDiskDataAndIndexes
FROM information_schema.tables WHERE engine='InnoDB') A;
Это скажет, сколько потраченного пространства может быть восстановлено после применения InnoDB Cleanup.
Спасибо за ваш вклад. Моя дисковая квота с тех пор полностью заполнена - прежде чем я буду действовать по любому из советов в ваших сообщениях, мне понадобится свободное место? Я отмечаю, что в вашем первоначальном посте на SO упоминается о создании дампа SQL, но это, вероятно, создаст файл размером ~ 90 ГБ, куда некуда деваться.
Джеймс
mysqldump будет только логическое представление страниц данных, а не индексов. Вам понадобится другое монтирование диска, возможно, удаленный сервер, чтобы сбросить данные.
RolandoMySQLDBA
9
Это возвращает 91.25350952148438 для меня как SpaceToReclaim. Это в мегабайтах? процент? байт?
Исаак
Я знаю, что это слишком старо. Но для любого, кто придет сюда с проблемой, вам нужно заменить число 94на любой размер вашего ibdata1файла в ГБ, и SpaceToReclaimон даст вам размер в ГБ.
Анупсабрахам
8
Этот файл ibdata1не, ibdatalи он содержит все ваши базы данных InnoDB. Если вы удалите его, вы потеряете все свои данные.
Если вы используете innodb в качестве движка MySQL, по умолчанию все ваши базы данных будут сохранены в ibdata1. Также есть файлы журналов ib_logfile0 и ib_logfile1. Не удаляйте эти файлы.
SpaceToReclaim
. Это в мегабайтах? процент? байт?94
на любой размер вашегоibdata1
файла в ГБ, иSpaceToReclaim
он даст вам размер в ГБ.Этот файл
ibdata1
не,ibdatal
и он содержит все ваши базы данных InnoDB. Если вы удалите его, вы потеряете все свои данные.Некоторые идеи о том, как с этим бороться, см. В разделе Как сжать / очистить файл ibdata1 в MySQL .
источник
Если вы используете innodb в качестве движка MySQL, по умолчанию все ваши базы данных будут сохранены в ibdata1. Также есть файлы журналов ib_logfile0 и ib_logfile1. Не удаляйте эти файлы.
источник