Синтаксис BACKUP TABLE
BACKUP TABLE tbl_name[,tbl_name...] TO "/path/to/backup/directory"
Копирует в каталог резервного копирования тот минимум табличных файлов, который достаточен для восстановления таблицы. На данный момент работает только для таблиц MyISAM . Для таблиц MyISAM копирует файлы ".frm" (определений) и ".MYD" (данных). Индексные файлы могут быть реконструированы по этим двум.
Перед использованием этой команды, пожалуйста, ознакомьтесь с разделом .
В процессе резервного копирования будет установлена блокировка чтения отдельно для каждой таблицы на время ее копирования. Если необходимо сделать резервное копирование в виде мгновенного образа нескольких таблиц, необходимо сначала запросить LOCK TABLES установки блокировки чтения для каждой таблицы в группе.
Команда возвращает таблицу со следующими столбцами:
Столбец | Значение | Table | Имя таблицы | Op | Всегда "backup" | Msg_type | Одно из значений status , error , info или warning . | Msg_text | Само сообщение. |
Заметим, что BACKUP TABLE доступна только в версии MySQL 3.23.25 и выше.
Синтаксис RESTORE TABLE
RESTORE TABLE tbl_name[,tbl_name...] FROM "/path/to/backup/directory"
Восстанавливает таблицу(ы) из резервной копии, созданной с помощью BACKUP TABLE . Существующие таблицы не перезаписываются: при попытке восстановления поверх существующей таблицы будет выдана ошибка. Восстановление занимает больше времени, нежели BACKUP - из-за необходимости повторного построения индекса. Чем больше в таблице будет ключей, тем больше времени заберет реконструкция. Эта команда, так же как и BACKUP TABLE , в настоящее время работает только для таблиц MyISAM .
Команда возвращает таблицу со следующими столбцами:
Столбец | Значение | Table | Имя таблицы | Op | Всегда "restore" | Msg_type | Одно из значений status , error , info или warning . | Msg_text | Само сообщение. |
Синтаксис CHECK TABLE
CHECK TABLE tbl_name[,tbl_name...] [option [option...]]
option = QUICK | FAST | MEDIUM | EXTENDED | CHANGED
CHECK TABLE работает только на таблицах MyISAM и InnoDB . На таблицах типа MyISAM команда эквивалентна запуску на таблице myisamchk -m table_name .
Если опция не указана, используется MEDIUM .
Проверяет таблицу(ы) на наличие ошибок. Для таблиц MyISAM обновляется статистика ключей. Команда возвращает таблицу со следующими столбцами:
Столбец | Значение | Table | Имя таблицы. | Op | Всегда "check". | Msg_type | Одно из значений status , error , info , или warning . | Msg_text | Само сообщение. |
Заметим, что по каждой проверяемой таблице может быть выдано много строк информации. Последняя строка будет представлять Msg_type status и, как правило, должна содержать OK . Если выдается что-либо отличное от OK и Not checked , то обычно следует провести ремонт таблицы (см. раздел Использование myisamchk для профилактики таблиц и послеаварийного). Not checked свидетельствует о том, что указанный для таблицы тип (TYPE ) не нуждается в проверке.
Различные типы проверки означают следующее:
Тип | Действия | QUICK | Не сканировать строки для проверки на неправильные связи. | FAST | Проверять только таблицы, которые не были корректно закрыты. | CHANGED | Проверять только таблицы, которые изменились со времени последней проверки или не были закрыты корректно. | MEDIUM | Сканировать строки для проверки того, что уничтоженные связи порядке. При этом также подсчитывается ключевая контрольная сумма для строки и сравнивается с подсчитанной контрольной суммой для ключей. | EXTENDED | Выполнить полный просмотр ключа для всех ключей для каждой строки. Успех такой проверки гарантирует 100%-ное отсутствие противоречий в таблице, но на проверку уйдет немало времени! |
Для таблиц MyISAM с динамическими размерами при запуске проверки всегда выполняется проверка MEDIUM . Для строк со статическими размерами мы пропускаем сканирование строк для QUICK и FAST , поскольку повреждение строк происходит крайне редко.
Проверочные опции можно сочетать:
CHECK TABLE test_table FAST QUICK;
Эта команда просто вызовет быструю проверку таблицы для выявления того, была ли она закрыта корректно.
Примечание: в некоторых случаях CHECK TABLE изменяет таблицу! Это происходит, если таблица помечена как "поврежденная/corrupted" или "не закрытая корректно/not closed properly", а CHECK TABLE не находит никаких проблем в таблице. В этом случае CHECK TABLE отметит в таблице, что с ней все нормально.
Если таблица повреждена, то, скорее всего, проблема в индексах, а не в данных. Проверки всех типов обеспечивают всестороннюю проверку индексов и тем самым должны обнаруживать большинство ошибок.
Если проверяется таблица, с которой предположительно все нормально, то можно опустить проверочные опции или указать опцию QUICK . Последнюю возможность следует использовать в случае ограничений по времени и тогда, когда можно пойти на риск (очень незначительный), что QUICK пропустит ошибку в файле данных. (В большинстве случаев MySQL должен найти - при нормальной работе - любые ошибки в файле с данными. Если ошибки найдены, то таблица будет отмечена как "поврежденная/corrupted", и в таком случае ее нельзя будет использовать, пока она не будет исправлена.)
FAST и CHANGED главным образом предназначены для использования в сценариях (например, для запуска из cron ), если необходимо время от времени проверять таблицы. В большинстве случаев следует отдавать предпочтение FAST перед CHANGED (иначе надо поступать только в случае, когда возникает подозрение, что найдена ошибка в самом коде MyISAM ).
Прибегать к EXTENDED следует только тогда, когда после выполнения нормальной проверки для таблицы по-прежнему выдаются странные ошибки при попытке MySQL обновить строку или найти строку по ключу (что очень маловероятно в случае успеха нормальной проверки!).
Некоторые проблемы, о которых сообщается при проверке таблицы, нельзя исправить автоматически:
Found row where the auto_increment column has the value 0 . Это означает, что в таблице есть строка, где индексированный столбец AUTO_INCREMENT содержит значение 0 (строку, в которой столбец
AUTO_INCREMENT имеет значение 0, можно создать, явно установив столбец в 0 командой UPDATE ). Это само по себе не является ошибкой, но может вызвать неприятности, если понадобится сделать дамп таблицы или восстановить ее или выполнить над ней ALTER TABLE. В этом случае столбец с атрибутом AUTO_INCREMENT изменит значение в соответствии с правилами для столбцов AUTO_INCREMENT , что может вызвать проблемы, подобные ошибке дублирования ключа. Чтобы избавиться от предупреждения, просто выполните команду UPDATE для установки в столбце значения, отличного от 0.
Синтаксис REPAIR TABLE
REPAIR TABLE tbl_name[,tbl_name...] [QUICK] [EXTENDED] [USE_FRM]
REPAIR TABLE работает только на таблицах типа MyISAM и эквивалентна выполнению на таблице myisamchk -r table_name .
При обыкновенной работе запускать эту команду не приходится, но если случится катастрофа, то с помощью REPAIR TABLE практически наверняка удастся вернуть все данные из таблицы MyISAM . Если таблицы сильно повреждены, то следует постараться выяснить, что послужило этому причиной! Обращайтесь к разделам Что делать, если работа MySQL сопровождается постоянными сбоями и Проблемы с таблицами MyISAM.
REPAIR TABLE ремонтирует таблицу, которая, возможно, повреждена. Команда возвращает таблицу со следующими столбцами:
Столбец | Значение | Table | Имя таблицы | Op | Всегда "repair" | Msg_type | Одно из значений status , error , info или warning . | Msg_text | Само сообщение. |
Заметим, что по каждой ремонтируемой таблице может быть выдано много строк информации. Последняя строка будет представлять Msg_type status и, как правило, должна содержать OK . Если выдается что-либо отличное от OK , то следует попробовать исправить таблицу с помощью myisamchk -o , поскольку в REPAIR TABLE пока реализованы не все опции myisamchk . В скором будущем мы сделаем команду более гибкой.
Если указан QUICK , то MySQL будет пытаться сделать REPAIR только индексного дерева.
Если используется EXTENDED , то MySQL будет создавать индекс строка за строкой вместо создания по одному индексу единоразово с помощью сортировки; такая техника может работать лучше сортировки для ключей фиксированной длины, если речь идет о хорошо сжимаемых ключах типа char() большой длины.
Что касается MySQL 4.0.2, то тут для REPAIR существует режим USE_FRM . Используйте его, если отсутствует файл ".MYI" или поврежден его заголовок. В этом режиме MySQL воссоздаст таблицу, используя информацию из файла ".frm". Этот вид исправления в myisamchk недоступен.
1 2 3 4 5 6 7
8 8 8
| |