Главная > MySQL | Базы данных > Ремонт MySQL таблиц с помощью myisamchk

Ремонт MySQL таблиц с помощью myisamchk

12.02.2012 0 коммент. » Просмотры: 1 471
 

Полное описание здесь: Справочное руководство по MySQL
Пути прописаны для Debian Like систем

*где 512M = 1/4 Доступной ОЗУ

--[дополнено 18.07.2013]--

Сегодня вновь потребовалось восстанавливать большую базу (300+ Гб), поэтому решил тут написать немного про ключи. Разберем такую команду:

  • -r = означает что необходимо восстановить базу
  • -q = означает что необходимо использовать "быстрый режим"
  • -v = означает выводить информацию о работе
  • --sort_buffer_size = задает размер буфера который будет использоваться для сортировки. Нужно устанавливать побольше, рекомендуемое значение 1/4 от ОЗУ, но не больше 4 Гб
  • --key_buffer_size = задает размер буфера для хранения ключей. Нужно устанавливать побольше, рекомендуемое значение 1/4 от ОЗУ.

Собственно, это и все что хотел дополнить. Подробнее по ключам, смотрите в man-е, например тут: myisamchk(1) - Linux man page

--[дополнено 26.03.2015]--

Чтобы не ходить подсматривать значения опций выложу их тут (источник: mysql.ru):

Опции исправления для myisamchk

Следующие опции используются, если myisamchk запускается с -r или -o:

  • -D # или --data-file-length=# Максимальная длина файла данных (когда файл данных пересоздается при его переполнении'').
  • -e или --extend-check Пробовать исправлять каждую возможную строку из файла данных. Обычно при этом обнаруживается масса замусоренных строк. Использовать эту опцию следует только в самом крайнем случае, когда больше ничего не остается.
  • -f или --force Писать поверх старых временных файлов (`table_name.TMD') вместо аварийного прекращения.
  • -k # или keys-used=# Если используется ISAM, то данный параметр предписывает обработчику таблиц ISAM на необходимость обновить только первые # индексов. Если используется MyISAM, то определяет, какие ключи использовать, при этом каждый двоичный бит соответствует одному ключу (первый ключ - это бит 0). Может использоваться для ускорения вставок! Отключенные индексы можно снова активизировать с помощью myisamchk -r. keys.
  • -l или --no-symlinks Не рассматривать символические ссылки. Обычно myisamchk исправляет таблицы, на которые указывают символические ссылки. Данная опция отсутствует в MySQL 4.0, в связи с тем, что MySQL 4.0 не удаляет символические ссылки во время восстановления.
  • -r или --recover При указании этой опции можно исправить практически все, кроме уникальных ключей, в которых есть повторения (ошибка, вероятность которой мизерна для таблиц ISAM/MyISAM). Если необходимо восстановить таблицу, то начинать надо с этой опции. Только если myisamchk сообщит, что таблица не может быть восстановлена с помощью -r, тогда следует пытаться применять -o (отметим, что в тех маловероятных случаях, когда -r не срабатывает, файл данных остается неизменным), В случае большого объема памяти следует увеличить размер sort_buffer_size!

-o или --safe-recover
Используется старый метод восстановления (читаются подряд все строки и обновляются все деревья индексов на основе найденных строк); такой алгоритм работает на порядок медленнее -r, но метод справляется с несколькими редкими случаями, непосильными для -r. При этом методе восстановления также используется значительно меньше дискового пространства, нежели в случае -r. Обычно всегда следует начинать с исправления посредством -r, и только если результат не будет достигнут, использовать -o. Для систем с большим объемом памяти следует увеличить размер key_buffer_size!

-n или --sort-recover
Заставляет myisamchk использовать сортировку при разрешении ключей, даже если это потребует временных файлов очень большого размера.

--character-sets-dir=...
Каталог, где хранятся кодировки.

--set-character-set=name
Изменить используемую для индекса кодировку

-t или --tmpdir=path
Путь для хранения временных файлов. Если не задан, myisamchk использует для пути переменную окружения TMPDIR.

-q или --quick
Быстрый ремонт без изменения файла данных. Можно добавить вторую -q, чтобы дать myisamchk санкцию на изменение исходного файла данных в случае дублирования ключей

-u или --unpack
Распаковать файл, упакованный в myisampack.

--[дополнено 31.10.2016]--

Расширения файлов MyISAM баз:

  • FRM - структура таблицы или определение таблицы
  • MYI - файл индексов таблицы
  • MYD - файл с данными таблицы
  • TMD - временный файл данных, который создается при запуске myisamchk без параметра -q

Иногда бывают такие моменты, когда не хватает места для временного файла востановления (*.TMD) рядом с основными файлами базы. Например:

  •  файлы базы занимают 500 Гб, база хранится в /var/lib/mysql/mydb/*
  • диск разбит таким образом, что в /var ( или в корне /) осталось свободных всего 200 Гб
  • для временного файла необходимо столько же, сколько занимает таблица, т.е. свободных 500 Гб.
  • в /home у вас доступно 600 Гб

Хотелось бы сделать как-то так, чтобы поломанная таблица была в одном разделе (файлы frm, myi, myd), а временный файл создающийся во время восстановления (tmd) в другом. Простого способа задать путь к файлу в параметрах - нет. Однако, можно поступить так:

  • создаете пустой файл /home/tmp/mydb/table.TMD
  • помещаете символическую ссылку в папку базы, т.е. символическая ссылка должны быть тут: /var/lib/mysql/mydb/table.TMD
  • запускаете myisamchk с параметром -f
  • данные пишутся по символической ссылке в раздел где достаточно места

Разумеется, таких ситуаций стоит избегать и иметь достаточный запас места, или копию базы. Но случаи бывают разные 🙂

Автор: | Теги:

Важно

У нас заработал ФОРУМ. Все вопросы, которые не касаются статьи, а так же вопросы по конкретно вашему случаю нужно задавать и обсуждать именно там, в разделе "Помощь пользователям".

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Разрешены HTML-теги: <a>, <code>, <i>, <em>, <strong>, <b>, <u>, <strike>