Потеря данных в MySQL после сбоя сервера

После перезапуска сервера из-за отключения питания мы потеряли все данные, сохраненные в базе данных утром (записи клиента, созданные на веб-сайте). За несколько минут до сбоя я смог увидеть такие данные в "MySQL Query Browser" во время некоторых обычных проверок. После аварии все записи, созданные утром, исчезли, а самые последние, которые я видел, были созданы в 7 часов вечера накануне. Кажется, что все операторы INSERT были выполнены в кеше, который не мог быть сброшен из-за отключения питания. Использует ли MySQL такой механизм кэширования? Если да, это доказательство сбоя и как я могу его настроить?

Среда: mysql 5.X + Ubuntu 10.4 + raid1 + Jira4.1.2

2 ответа

Решение

Если вы не используете вставку с задержкой, вставки / обновления / удаления фиксируются немедленно. Возможно, файл ключа записан не полностью. Если у вас есть карта контроллера кэширования, она, возможно, кэшировала ее и сказала ОС, что она его зафиксировала. Вы управляли проверочным столом / ремонтным столом против него? Если это так, вы можете обнаружить, что только индекс поврежден и что большинство записей все еще там.

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

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

MySQL можно настроить для кэширования данных, но обычно это не так. Он отвечает клиенту только тогда, когда данные находятся на диске. Возможно, вы настроили mysql таким образом, что он пытается восстановить грязно закрытые таблицы автоматически при запуске, и некоторые записи были удалены.

Кэш запросов и кэш сортировки кэшируют только те данные, которые могут быть прочитаны из таблиц (например, select ... from).

Возможно, ОС настроена для кэширования записей (я думаю, что Ubuntu Ext3, по умолчанию 5-секундные коммиты... Я не знаю насчет ext4, который находится в 10.4).

Другие вопросы по тегам