Страница 1 из 1

ibdata1 что это?

Добавлено: 04 апр 2016, 14:55
Dgikar
В папке OpenServer\userdata\MySQL-5.5, есть файл ibdata1. У меня, при 2-х (не большие +- 1,5 Мб) БД, он занимает аж 23,2 Гб...

Подскажите плз, что это за файл? Можно ли его безболезненно удалить (все же 23 Гб - многовато...)

Re: ibdata1 что это?

Добавлено: 04 апр 2016, 15:00
Максим
Это файл баз данных в формате innoDB. Его особенность в том, что если вы создали базу размером 23 гигабайта, а потом её удалили, то файл не уменьшается в размере. Свободное место в нём просто остаётся на будущее для других баз данных. Если вам это не нравится то пересоздайте все базы путём импорта/экспорта одним sql файлом или используйте MyISAM формат бд.

Re: ibdata1 что это?

Добавлено: 04 апр 2016, 17:34
Dgikar
Максим, спасибо за ответ.

Я правильно понимаю, что, если я, пересоздам БД, этот файл уменьшиться? Или его, сейчас можно удалить, а потом пересоздать БД и все будет дальше ОК? Как правильно сделать?

Re: ibdata1 что это?

Добавлено: 04 апр 2016, 19:55
DelphinPRO
или используйте MyISAM формат бд.
А вот этого делать я бы не советовал ни при каких условиях. myisam - нетранзакционное хранилище без внешних ключей и этим всё сказано

Re: ibdata1 что это?

Добавлено: 04 апр 2016, 23:08
Максим
Dgikar, импортируете все базы в один файл с опцией пересоздания таблиц. Убеждаетесь что информация в файле корректна, а не какие нибудь там кракозяблы или знаки вопросов вместо данных. Останавливаете сервер. Потом удаляете ibdata1, ib_logfile0, ib_logfile1. Потом запускаете сервер и импортируете файл с базами.

Re: ibdata1 что это?

Добавлено: 05 апр 2016, 15:11
keilman
DelphinPRO писал(а):А вот этого делать я бы не советовал ни при каких условиях. myisam - нетранзакционное хранилище без внешних ключей и этим всё сказано
Вы уж так категорично не отвечали бы!
Сначала нужно узнать, для чего человек использует базу данных, что хранит, какой объем и др.
Я бы сказал, что в большинстве случаев лучше подходит myisam чем innodb.

Re: ibdata1 что это?

Добавлено: 05 апр 2016, 15:27
DelphinPRO
ну-ну..

UPD
В прошлый раз некогда было. Сейчас напишу.
Вам важна целостность ваших данных? Думаю да. Представим сферическую БД в вакууме. В ней несколько взаимосвязанных таблиц. При изменении одной таблицы вам необходимо сделать синхронные апдейты в парочке других. Вы начинаете изменять одну таблицу, потом вторую, и тут, бац! - какой-то сбой. Неважно что произошло, суть в том, что последнюю таблицу мы не успели изменить и данные в ней некорректные. Если в этой таблице хранится список котиков, загруженных пользователем на сайт, это не так страшно, как если бы речь шла о финансовых операциях, но для того пользователя это все же важно.
Какой выход вы видите для исключения подобных ситуаций? Лично я вижу только один - обернуть все операции с таблицами в транзакцию. Но MyIsam понятия не имеет о транзакциях. И шо делать???
Про использование внешних ключей, коих тоже нет в MyIsam я пожалуй промолчу, и так увлекся...