После перезапуска сервера из-за отключения электроэнергии мы потеряли все данные, сохраненные в базе в течение утра (записи клиентов, созданные на сайте). За несколько минут до сбоя я смог увидеть такие данные в «MySQL Query Browser» во время некоторых рутинных проверок. После сбоя все записи, созданные утром, исчезли, а самые свежие, которые я мог видеть, были созданы в 19:00. накануне. Похоже, что все операторы INSERT были выполнены в кеше, который не удалось очистить из-за отключения электроэнергии. Использует ли MySQL такой механизм кэширования? Если да, защищено ли это от сбоев и как я могу его настроить?
Среда: mysql 5.X + ubuntu 10.4 + raid1 + Jira4.1.2
если вы не используете отложенную вставку, вставки / обновления / удаления фиксируются немедленно. Ключевой файл мог не записаться полностью. Если у вас есть карта кэширующего контроллера, возможно, она кэшировала ее и сообщила ОС, что зафиксировала ее. Вы запускали контрольную таблицу / таблицу ремонта против него? Если это так, вы можете обнаружить, что поврежден только индекс, а большинство записей все еще там.
MyISAM работает быстро, но ему не хватает некоторых мер предосторожности, которые необходимо предпринять в случае возникновения проблем с питанием / сбоя сервера. InnoDB - это еще один метод, который немного безопаснее, но работает медленнее в зависимости от типов запросов, которые вы выполняете. Он добавляет блокировку на уровне строк, а не блокировку таблицы, но для select count (*) требуется сканирование строк, тогда как MyISAM может ответить на это из индекса.
Вы можете настроить репликацию для отправки данных на зеркало, но, если оно находится в том же центре обработки данных, вы столкнетесь с такой же вероятностью того, что данные будут повреждены.
MySQL можно настроить для кэширования данных, но обычно это не так. Он отвечает клиенту только тогда, когда данные находятся на диске. Возможно, вы настроили mysql таким образом, что он пытается автоматически восстанавливать нечисто закрытые таблицы при запуске, и некоторые записи были удалены.
Кэш запросов и кэш сортировки кэшируют только те данные, которые могут быть прочитаны из таблиц (например, выбрать ... из).
Возможно, ОС настроена на запись в кеш (я думаю, что ubuntu ext3, по умолчанию 5-секундные коммиты ... я не знаю о ext4, который находится в 10.4).