Тестирование починки таблиц
by Евгений Викторович Арбатский - На тестовой базе MySQL с объемом в 10млн. записей провел эксперимент с починкой таблицы. Таблица изначально была целой и создана была в формате myISAM. Следует отметить что такой формат хранения данных не может задействовать механизм транзакций в MySQL. Починка таблиц в MySQL производится командой REPAIR TABLE имя_таблицы.
Запустил команду починки, через некоторое время пока выполнение команды не закончилось выключил СУБД (выключение производилось через корректный shutdown). Затем включил СУБД и посмотрел на результат. Результат конечно был ожидаем, но все не настолько: таблица в результате стала показываться как поврежденное представление (при этом в БД не было более таблиц и это была единственная БД, кроме базовой БД mysql). Данные, как и следовало ожидать, необратимо повредились. Хотя я так же предполагал, что MySQL поступит умнее -починку будет делать на копии таблицы, а уже после починки заменит текущую таблицу из копии, но в жизни все оказалось печальнее.
Зачастую проблемы на MyISAM могут вызваны сбоями в работе СУБД при выполнении команд модификации данных. Либо при перестройке индексов, хотя здесь еще надо проводить эксперимент. Возможно после восстановления тестовой таблицы я проведу эксперимент с выключением СУБД при построении индекса по одному из полей.
Вот таким образом с использованием типовых неопасных команд можно нарушить БД в MySQL. При этом я не рассматриваю случай жесткого выключения СУБД.
Вывод: использовать в MySQL InnoDB для хранения таблиц, хоть это и негативно сказывается на скорости обработки данных.
Зачастую проблемы на MyISAM могут вызваны сбоями в работе СУБД при выполнении команд модификации данных. Либо при перестройке индексов, хотя здесь еще надо проводить эксперимент. Возможно после восстановления тестовой таблицы я проведу эксперимент с выключением СУБД при построении индекса по одному из полей.
Вот таким образом с использованием типовых неопасных команд можно нарушить БД в MySQL. При этом я не рассматриваю случай жесткого выключения СУБД.
Вывод: использовать в MySQL InnoDB для хранения таблиц, хоть это и негативно сказывается на скорости обработки данных.