Если после проведения проверки таблиц ошибка осталась, ее придется исправлять другим способом. Прежде чем вы начали с ней что-либо делать, потребуется сделать копию таблицы, то позволит испробовать разные варианты устранения ошибки.
Утилита myisamchk также может быть использована для восстановления поврежденной таблицы. Для этого в качестве параметра утилиты задается параметр -r:
myisamchk -r имя-файла-таблицы
Следующий пример показывает работу этой утилиты.
Листинг 15.10.
[root@host]# /usr/local/mysql/bin/myisamchk -r test/users
- recovering (with keycache) MyISAM-table 'test/users'
- Data records: 16
Если параметр -r не выполнил своих задач, то на помощь может прийти параметр -o, который предназначен для задания режима медленного восстановления таблицы. У этой утилиты есть и другие параметры, перечисленные в табл. 15.2.
Восстановление таблиц
Как сказано в предыдущем разделе, утилита myisamchk работает на файловом уровне и этим самым требует, чтобы все блокировки были сняты и все клиенты были отключены от сервера до ее запуска.
При проверке таблицы сначала следует попробовать самый быстрый способ, а уж потом при необходимости прибегнуть к более медленному. Огромное количество мелких проблем можно устранить, не прибегая к медленным проверкам. Но если после запуска самой тщательной проверки ошибки все еще останутся, придется восстанавливать таблицу из резервной копии (см. раздел "Восстановление таблиц и баз данных по резервным копиям").
Кроме того, имеется еще один способ восстановления таблиц - это применение команды REPAIR TABLE:
REPAIR TABLE имя-таблицы, --Как и в случае с утилитой myisamchk, можно задавать параметр QUICK или EXTENDED для назначения определенного типа проверки. Этот параметр задается в командной строке с командой REPAIR TABLE.
Восстановление таблиц
Оптимизация таблиц
Оптимизация таблиц - это очень важная и полезная операция. Чаще всего необхо­димость в ней возникает, когда с таблицей производится много операций, в частности операций удаления. При этом таблица быстро фрагментируется, что приводит к снижению скорости работы с ней. Команда OPTIMIZE TABLE физически удаляет удаленные записи, освобождая тем самым дисковое пространство.
Вот как выглядит синтаксис команды OPTIMIZE TABLE:
OPTIMIZE TABLE имя-таблицы,
Например, следующая команда оптимизирует таблицу water.
Восстановление таблиц
Данная команда действует безотказно и всегда приходит на помощь, убирая весь не­нужный хлам. Кроме удаления старых и ненужных файлов, программа сортирует индексные файлы, переносит все в один непрерывный массив, после чего обновляет статистику. Но помните, что во время обработки таблицы данной командой, она становится закрытой для клиентов.
Различные точки зрения
Для восстановления поврежденной таблицы можно использовать утилиту myisamchk или команду REPAIR TABLE, но следует помнить (и об этом было сказано в описании команды CHECK TABLE), что команду REPAIR TABLE можно запускать при работающем сервере, а утилиту myisamchk - только при отключенном сервере.