Вы определенно на правильном пути.
Всякий раз, когда InnoDB выполняет транзакцию, которая должна быть зафиксирована, она выполняется как двухфазная фиксация. Транзакция записывается в эти журналы в первую очередь. Затем они совершаются оттуда.
Это очень помогает в случае сбоя MySQL или сервера.
Когда вы перезапускаете mysql, все незафиксированные записи в ib_logfile0 и ib_logfile1 воспроизводятся как часть аварийного восстановления InnoDB, чтобы привести InnoDB в гармоничное состояние (Это согласованные и долговечные части Соответствие ACID )
Если вы удалите ib_logfile0 и ib_logfile1 и запустите mysql, любая незафиксированная транзакция, содержащаяся в этих файлах, будет потеряна. Если во время цикла восстановления после сбоя файлы журнала отсутствуют, они восстанавливаются на основе параметра innodb_log_file_size .
Пожалуйста, обратитесь к документации MySQL для подробного объяснения InnoDB .
@ karatedog Часть MVCC InnoDB находится в системном табличном пространстве, более известном как ibdata1. Какие бы данные ни отображались до начала транзакции, они записываются, чтобы позволить другим, имеющим доступ к нужным строкам, просматривать данные до того, как будут применены какие-либо обновления. Это позволяет для того, что называется REPEATABLE-READ. Это подпадает под I соответствие ACID, я имею в виду изоляцию. Я писал сообщения об этом в StackExchange администратора баз данных в отношении различных сценариев, в которых изоляция транзакций является хорошей, плохой или ужасной.
Что касается MyISAM, восстановление после сбоя не является автоматическим. Вылетает довольно легко . Вот почему команда SQL REPAIR TABLE
существует. Вот почему утилита MySQL myisamchk
имеет опцию -r
для выполнения REPAIR TABLE
для таблиц MyISAM, которые не подключены.
MariaDB и Aria предпринимали попытки сделать отказоустойчивый механизм хранения в качестве замены MyISAM.