MyIsam безопаснее, чем InnoDB?

416
Tobia

Является ли механизм MyIsam более безопасным, чем InnoDB, в отношении потери данных из-за ошибки FileSystem?

Кажется, что InnoDB не поддается ремонту с помощью инструмента MySQL.

Мне пришлось выбрать свой движок, и я выбрал InnoDB из-за внешних ключей, но я рассмотрю миграцию движка, если это будет более безопасным.

0
InnoDB не подлежит ремонту с помощью указанного инструмента, потому что он не требует этого процесса восстановления в случае сбоя. Вместо этого он воспроизводит логи. Der Hochstapler 11 лет назад 3
... что означает, что InnoDB и MyISAM примерно сопоставимы по надежности с файловой системой с журналированием и без регистрации, соответственно. Aaron Miller 11 лет назад 1
Блокировка записей, атомарные коммиты и откаты через систему регистрации транзакций по сравнению с poof, ваша таблица просто повреждена, и теперь у вас есть этот отличный инструмент, чтобы попытаться вернуть ваши данные. Активный против реактивного. Fiasco Labs 11 лет назад 0

3 ответа на вопрос

1
RolandoMySQLDBA

InnoDB имеет очень сложную архитектуру в фоновом режиме

InnoDB Архитектура

InnoDB Architecture

В случае сбоя InnoDB имеет буфер двойной записи и файлы журнала для поддержки механизмов восстановления после сбоя. MyISAM не имеет такой защиты. Я написал сообщения в DBA StackExchange об этом:

MyISAM может аварийно завершить работу, поскольку данные никогда не кэшируются в памяти. Все операции чтения и записи требуют перебора ввода-вывода из .MYDфайла таблиц MyISAM . Это означает, что дескрипторы открытых файлов находятся во власти ОС.

Если вы хотите, чтобы InnoDB был ремонтопригодным, вам нужно настроить my.cnf, чтобы сделать InnoDB менее зависимым от ОС и более зависимым от внутренней архитектуры. См. Мой недавний пост Высокая средняя загрузка из-за высокой загрузки процессора MySQL . Таким образом, InnoDB Crash Recovery может быть более самовосстанавливающимся.

0
Alex Antonov

Я бы использовал InnoDB из-за блокировок на запись против блокировок MyIsam на таблицу отверстий. Также InnoDB не требует ремонта инструмента, как уже было сказано ранее. Кроме того, движок InnoDB может сохранять таблицы в отдельных файлах, поэтому он выглядит более безопасным с точки зрения сбоя файловой системы.

MyISAM также может сохранять таблицы в отдельных файлах. ChrisInEdmonton 11 лет назад 1
@ChrisInEdmonton, да, вы правы, это поведение myisam по умолчанию. Alex Antonov 11 лет назад 0
Так вы предлагаете innodb с отдельными журналами файлов? Tobia 11 лет назад 0
Я предлагаю innodb с конфигурацией «таблица в файл» (проверьте [ссылка] (http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html)). Alex Antonov 11 лет назад 0
0
danblack

Ошибки файловой системы или даже ошибки на уровне блоков не относятся к тем элементам, которые были тщательно протестированы или учтены при реализации MyISAM или Innodb. Хотя при их записи может произойти некоторое обнаружение, существует большое предположение, что то, что когда-то было записано без ошибок, верно. Контрольные суммы существуют и проверяются при чтении, но путь восстановления после ошибок на страницах / строках, которые не соответствуют контрольной сумме, я не думаю, что был полностью продуман.

Я подозреваю, что правильная стратегия снижения риска для этого (и некоторых других форм сбоя сервера) заключается в том, чтобы запустить ведомое устройство репликации в другой файловой системе и в качестве DR сохранить двоичные журналы и логический дамп снимка SQL. Таким образом, вам не нужно полагаться на инструменты, которые могут обойти некоторые формы сбоев с потерями данных.

Похожие вопросы