Назад | Перейти на главную страницу

Ошибка MySql: неверный ключевой файл для таблицы

У нас есть база данных MySql 5.5, на которой работает InnoDB в Linux. В одной таблице (с именем table_search) работает MyISAM, чтобы иметь возможность выполнять полнотекстовый поиск. В таблице 823 368 строк.

Вчера у нас произошел сбой сервера, чтобы восстановить его снова, мы переместили необработанные данные на новый сервер, и теперь мы работаем на новом сервере.

Сначала все работало нормально, но через час в журналах ошибок мы получили что-то вроде этого:

1. Duplicate entry 'X-Y-Z' for key index_titles (where index_titles is an index in table_search)

2. After this there where lots of errors: Incorrect key file for table './database/table_search.MYI'; try to repair it

3. After this there where lots of errors: Table './database/table_search' is marked as crashed and should be repaired

Мы пытались исправить это с помощью:

myisamchk table_search.MYI

Мы получили такую ​​ошибку:

myisamchk: error: Keypointers and record positions doesn't match
MyISAM-table 'table_search.MYI' is corrupted

Затем мы попробовали:

myisamchk -r -o table_search.MYI

Теперь все снова работало, пока час назад не случилось то же самое. Итак, мы снова использовали myisamchk, и он работает.

Но это не кажется таким стабильным, как это случилось снова. Что мы можем сделать, чтобы этого больше не повторилось? Почему он испорчен? Каково решение?

Решение было другое. Мы перезапустили сервер, используя:

ft_min_word_len=3

(извините, что не упомянул об этом в вопросе)

В этом документе на MySql мы узнали, что:

Если вы используете myisamchk для выполнения операции, которая изменяет индексы таблиц (например, восстановление или анализ), индексы FULLTEXT перестраиваются с использованием значений полнотекстовых параметров по умолчанию для минимальной и максимальной длины слова и файла стоп-слов, если вы не укажете иное. Это может привести к сбою запросов.

Это было решение:

shell> myisamchk --recover --ft_min_word_len=3 table_search.MYI

Теперь сервер работает нормально почти 24 часа.

Звучит так, как будто ваша таблица повреждена, и myisamchk не может ее восстановить.

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