Spec-Zone .ru
спецификации, руководства, описания, API
|
Обсуждение в этом разделе описывает, как использовать myisamchk на MyISAM
таблицы
(расширения .MYI
и .MYD
).
Можно также использовать CHECK TABLE
и
REPAIR
TABLE
операторы, чтобы проверить и восстановить MyISAM
таблицы. См.
Раздел
13.7.2.2,"CHECK TABLE
Синтаксис", и Раздел
13.7.2.5,"REPAIR TABLE
Синтаксис".
Признаки поврежденных таблиц включают запросы, которые неожиданно прерываются и заметные ошибки, такие как они:
блокируется против изменения tbl_name
.frm
Не может найти файл
(Errcode: tbl_name
.MYInnn
)
Неожиданный конец файла
Файл записи разрушается
Получил ошибку nnn
от табличного
обработчика
Чтобы получить больше информации об ошибке, выполните perror nnn
, где nnn
код ошибки. Следующий пример показывает, как использовать perror, чтобы найти значения для наиболее распространенных кодов
ошибки, которые указывают на проблему с таблицей:
shell> perror 126 127 132 134 135 136 141 144
145
MySQL error code 126 = Index file is crashedMySQL error code 127 = Record-file is crashedMySQL error code 132 = Old database fileMySQL error code 134 = Record was already deleted (or record file crashed)MySQL error code 135 = No more room in record fileMySQL error code 136 = No more room in index fileMySQL error code 141 = Duplicate unique key or constraint on write or updateMySQL error code 144 = Table is crashed and last repair failedMySQL error code 145 = Table was marked as crashed and should be repaired
Отметьте, что ошибка 135 (больше комнаты в файле записи) и ошибка 136 (больше комнаты в индексном файле) не
являются ошибками, которые могут быть фиксированы простым восстановлением. В этом случае следует использовать ALTER TABLE
увеличиться MAX_ROWS
и AVG_ROW_LENGTH
табличные значения опции:
ALTER TABLEtbl_name
MAX_ROWS=xxx
AVG_ROW_LENGTH=yyy
;
Если Вы не знаете текущие табличные значения опции, использовать SHOW CREATE TABLE
.
Для других ошибок следует восстановить свои таблицы. myisamchk может обычно обнаруживать и решать большинство проблем, которые происходят.
Процесс восстановления включает до четырех этапов, описанных здесь. Прежде, чем Вы начнете, следует изменить расположение на каталог базы данных и проверить полномочия табличных файлов. На Unix удостоверьтесь, что они читаемы пользователем, которого mysqld выполняет как (и Вам, потому что Вы должны получить доступ к файлам, которые Вы проверяете). Если оказывается, что Вы должны изменить файлы, они должны также быть перезаписываемыми Вами.
Этот раздел для случаев, где табличная проверка перестала работать (такие как описанные в Разделе
7.6.2, "Как Проверить MyISAM
Таблицы для Ошибок"), или Вы хотите
использовать расширенные функции, которые обеспечивает myisamchk.
myisamchk опции, используемые для табличного обслуживания с, описываются в Разделе 4.6.3, "myisamchk — Утилита Табличного обслуживания MyISAM". у myisamchk также есть переменные, которые можно установить в выделение управляющей памяти, которое может улучшить производительность. См. Раздел 4.6.3.6, "myisamchk Использование Памяти".
Если Вы собираетесь восстановить таблицу из командной строки, следует сначала остановить mysqld сервер. Отметьте, что, когда Вы делаете mysqladmin завершение работы на удаленном сервере, mysqld сервер все еще доступен некоторое время, после mysqladmin возвраты, пока вся обработка оператора не остановилась, и все индексируют изменения, были сброшены к диску.
Этап 1: Проверка Ваших таблиц
Выполненный myisamchk
*.MYI или myisamchk-e *.MYI, если у Вас есть больше времени. Используйте
-s
(тихая) опция, чтобы подавить ненужную информацию.
Если mysqld
сервер останавливается, следует использовать --update-state
опция, чтобы сказать myisamchk отмечать таблицу как "проверено".
Необходимо восстановить только те таблицы, для которых myisamchk объявляет об ошибке. Для таких таблиц продолжите, чтобы Подготовить 2.
Если Вы получаете неожиданные ошибки, проверяя (такой как out of memory
ошибки),
или если myisamchk катастрофические отказы, идут, чтобы Подготовить
3.
Этап 2: Легкое безопасное восстановление
Во-первых, попробуйте myisamchk-r-q tbl_name
(-r -q
означает "быстрый режим восстановления").
Это пытается восстановить индексный файл, не касаясь файла данных. Если файл данных содержит все, что он должен
и удалить точка ссылок в корректных расположениях в пределах файла данных, это должно работать, и таблица
фиксируется. Начните восстанавливать следующую таблицу. Иначе, используйте следующую процедуру:
Сделайте резервное копирование файла данных перед продолжением.
Используйте myisamchk-r tbl_name
(-r
означает "режим восстановления"). Это
удаляет неправильные строки и удаленные строки от файла данных и восстанавливает индексный файл.
Если предыдущий шаг перестал работать, используйте myisamchk - безопасный - восстанавливаются tbl_name
.
Безопасный режим восстановления использует старый метод восстановления, который обрабатывает несколько
случаев, которые регулярный режим восстановления не делает (но медленнее).
Если Вы хотите, чтобы работа восстановления пошла намного быстрее, следует установить значения sort_buffer_size
и key_buffer_size
переменные каждый приблизительно к 25 % Вашей доступной памяти, работая myisamchk.
Если Вы получаете неожиданные ошибки, восстанавливая (такой как out of memory
ошибки), или если myisamchk
катастрофические отказы, идут, чтобы Подготовить 3.
Этап 3: Трудное восстановление
Следует достичь этой стадии, только если первый блок 16 Кбит в индексном файле уничтожается или содержит неправильную информацию, или если индексный файл отсутствует. В этом случае необходимо создать новый индексный файл. Сделайте так следующим образом:
Переместите файл данных в безопасное место.
Используйте табличный файл описания, чтобы создать новые (пустые) данные и индексные файлы:
shell>mysql
mysql>db_name
SET autocommit=1;
mysql>TRUNCATE TABLE
mysql>tbl_name
;quit
Скопируйте старый файл данных назад на недавно создаваемый файл данных. (Не просто положите обратно старый файл на новый файл. Вы хотите сохранить копию в случае, если что-то идет не так, как надо.)
Если Вы используете репликацию, следует остановить ее до выполнения вышеупомянутой процедуры, так как она включает операции файловой системы, и они не регистрируются MySQL.
Возвратитесь, чтобы Подготовить 2. myisamchk-r-q должен работать. (Это не должно быть бесконечным циклом.)
Можно также использовать REPAIR TABLE
SQL-оператор, который выполняет целую процедуру автоматически. Нет также никакой возможности
нежелательного взаимодействия между утилитой и сервером, потому что сервер делает всю работу, когда Вы
используете tbl_name
USE_FRMREPAIR TABLE
. См. Раздел 13.7.2.5,"REPAIR TABLE
Синтаксис".
Этап 4: Очень трудное восстановление
Следует достичь этой стадии только если .frm
файл описания также отказал. Это
никогда не должно происходить, потому что файл описания не изменяется после того, как таблица составляется:
Восстановите файл описания от резервного копирования и возвратитесь, чтобы Подготовить 3. Можно также восстановить индексный файл и возвратиться, чтобы Подготовить 2. В последнем случае следует запустить с myisamchk-r.
Если Вы не имеете резервного копирования, но знаете точно, как таблица была
составлена, создайте копию таблицы в другой базе данных. Удалите новый файл данных, и затем
переместитесь .frm
описание и .MYI
индексные
файлы от другой базы данных до Вашей разрушенной базы данных. Это дает Вам новое описание и индексные
файлы, но листы .MYD
один только файл данных. Возвратитесь, чтобы
Подготовить 2 и попытаться восстановить индексный файл.