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

Какая польза от файла ibdata1 в mysql

У меня есть приложение, в котором есть серверная база данных как Mysql (движок InnoDb), и в настоящее время мой клиент хочет уменьшить размер файла ibdata до некоторого фиксированного размера. Я нашел три решения ниже.

Решение 1. innodb_file_per_table

Решение 2. innodb_data_file_path = ibdata1: 50M; ibdata2: 50M: autoextend

Решение 3: innodb_data_file_path = ibdata1: 10M: autoextend: max: 50M

И я действительно ничего не знаю о файле ibadata1, может ли кто-нибудь мне помочь в этом, и я хочу знать, безопасно ли исправлять размер ibdata (решение 3) и для чего именно ibdata?

Вам действительно следует внимательно изучить документацию при работе с СУБД такой сложности. http://dev.mysql.com/doc/refman/5.1/en/innodb-configuration.html состояния:

Двумя важными дисковыми ресурсами, которыми управляет механизм хранения InnoDB, являются его файлы данных табличного пространства и его файлы журналов. Если вы не укажете параметры конфигурации InnoDB, MySQL создаст автоматически расширяющийся файл данных размером 10 МБ с именем ibdata1 и два файла журнала размером 5 МБ с именами ib_logfile0 и ib_logfile1 в каталоге данных MySQL.

По сути, файл ibdata1 содержит табличные данные ваших таблиц InnoDB. Указание более одного файла имеет смысл в тех случаях, когда вы используете другую подсистему хранения для хранения второго файла по соображениям производительности или если вам не хватает места для ibdata1 на его исходном разделе и вы хотите иметь простую надстройку хранилище с другим файлом хранилища. Очевидно, что исправление размера файла ограничивает общий объем данных, которые могут храниться в таблицах InnoDB.

Файл ibdata1, вероятно, в вашем случае автоматически увеличивается, поэтому он будет увеличиваться по мере того, как больше данных помещается в таблицы InnoDB. После удаления записей из таблиц InnoDB файл будет содержать страницы, помеченные как «свободные», которые можно использовать для будущих данных, но сам файл не подлежит сжатию. Если вы удалили большие объемы данных и вам нужно сжать ibdata1, единственный поддерживаемый способ - это резервное копирование таблиц с помощью mysqldump и повторно инициализируем вашу базу данных - см. этот ответ StackOverflow для подробностей.