Что заставляет таблицы ремонтироваться?

Каждый раз так часто я получаю сообщение об ошибке, когда одна из моих таблиц "помечена как разбитая и должна быть восстановлена". Затем я делаю REPAIR TABLE и исправляю его. Что заставляет их отмечать как разбитые и как я могу это предотвратить? Я использую таблицы MyISAM с MySQL 5.0.45.

Ответ 1

Существует несколько причин, по которым таблицы повреждаются, это подробно обсуждается в руководстве.

Для борьбы с ним лучше всего работают следующие вещи:

  • Удостоверьтесь, что вы всегда корректно завершаете MySQL
  • Рассмотрите возможность использования опции -myisam-recover для автоматической проверки/восстановления ваших таблиц в случае, если выключение было выполнено неправильно
  • Убедитесь, что вы используете самые последние версии, так как известные ошибки коррупции обычно фиксируются как можно скорее.
  • Дважды проверьте свое оборудование с тестом, чтобы узнать, не вызывает ли проблем. Инструменты, такие как sysbench и memtest86 часто могут помочь убедитесь, что все работает так, как должно.
  • Удостоверьтесь, что ничего не трогало каталог данных извне, например, проверки на вирусы, программы резервного копирования и т.д.

Ответ 2

Обычно это происходит, когда база данных не закрывается должным образом, например, сбой системы или аппаратная проблема.

Ответ 3

Я использовал для получения ошибок из mysql, как и вы.

Я решил свои проблемы таким образом

  • Преобразуйте все таблицы myisam в InnoDB (вы можете искать "myisam vs InnoDB" в stackoverflow.com и поисковых системах, чтобы узнать, почему)
  • Для получения наилучшей производительности от MySQL используйте стороннюю программу MONYOG (MySQL Monitor and Advisor) и проверьте рекомендации по производительности.

Эти два шага спасли меня. Надеюсь, они тоже помогут вам.

Ответ 4

Это может быть много, но Блог производительности MySQL упоминает ошибки в памяти, OS или MySQL, которые может вызвать скрытую коррупцию. Кроме того, что и в другой статье упоминают несколько вещей, которые следует учитывать при восстановлении после сбоя.