Назад | Перейти на главную страницу

Что за файл ibdata1 в моем каталоге / var / lib / mysql?

Зайдя в свою панель управления Webmin, я заметил, что практически все мое дисковое пространство заполнено. Я поискал десять самых больших файлов / каталогов в своей системе и обнаружил, что файл с именем ibdata1 занимает около 94 ГБ места. Он находится в моем каталоге / var / lib / mysql.

Что делает ibdata1? Могу ли я удалить его? Я предполагаю, что это какая-то свалка, но это просто дикая догадка.

Файл ibdata1 - системное табличное пространство для инфраструктуры InnoDB.

Он содержит несколько классов для информации, жизненно важной для InnoDB

  • Страницы данных таблицы
  • Индексные страницы таблицы
  • Словарь данных
  • Контрольные данные MVCC
    • Отменить пробел
    • Откат сегментов
  • Двойной буфер записи (страницы записываются в фоновом режиме, чтобы избежать кэширования ОС)
  • Вставить буфер (изменения вторичных индексов)

Обратите внимание на место ibdata1 во вселенной InnoDB (справа)

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

пример

  • datadir это / var / lib / mysql
  • CREATE TABLE mydb.mytable (...) ENGINE=InnoDB;, создает /var/lib/mysql/mydb/mytable.frm
    • innodb_file_per_table включен, страницы данных / индекса хранятся в /var/lib/mysql/mydb/mytable.ibd
    • innodb_file_per_table отключен, страницы данных / индекса хранятся в ibdata1

Независимо от того, где хранится таблица InnoDB, функциональность InnoDB требует поиска метаданных таблицы, а также хранения и извлечения MVCC информация для поддержки Соответствие ACID и Изоляция транзакции.

Вот мои прошлые статьи о разделении табличных данных и индексов из ibdata1

ЧТО ДЕЛАТЬ ДАЛЬШЕ

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

Вам нужно использовать My StackOverflow post и навсегда сжать этот файл.

Пожалуйста, запустите этот запрос:

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.

Этот файл ibdata1не ibdatal и он содержит все ваши базы данных InnoDB. Если вы удалите его, вы потеряете все свои данные.

Чтобы узнать, как с этим бороться, см. Как сжать / очистить файл ibdata1 в MySQL.

Если вы используете innodb в качестве движка MySQL, по умолчанию сохранит все ваши базы данных в ibdata1. Также есть файлы журналов ib_logfile0 и ib_logfile1. Не удаляйте эти файлы.