Когда таблицы оказываются поврежденными или mysqld всегда дает сбой после
некоторых команд, то можно провести испытания (если данный сбой
воспроизводим). Для этого нужно выполнить следующие действия:
Остановите демон MySQL (с помощью команды
mysqladmin shutdown).Сделайте резервную копию таблиц (в качестве меры предосторожности на случай, если процесс исправления таблиц пройдет некорректно, хотя это и маловероятно).
Проверьте все таблицы с помощью команды
myisamchk -s database/*.MYI. Исправьте некорректные таблицы с помощью командыmyisamchk -r database/table.MYI.Создайте еще раз резервные копии этих таблиц.
Переместите (или удалите совсем) все старые журнальные файлы из каталога данных MySQL, если нужно освободить больше места.
Запустите
mysqldс--log-bin(see Раздел 4.9.4, «Бинарный журнал обновлений»). Если вы хотите найти запрос, который приводит к сбоюmysqld, то следует использовать--log --log-bin.Когда таблица с искажениями будет получена, остановите сервер
mysqld.Восстановите систему из резервной копии.
Перезапустите сервер
mysqldбез--log-bin.Выполните заново команды
mysqlbinlog update-log-file | mysql. Обновленная запись в журнале сохраняется в каталоге баз данных MySQL с именемhostname-bin.#.Если в результате вышеприведенной команды таблицы опять окажутся поврежденными или вы можете получить сбой в работе
mysqld, то, значит, вы нашли повторяющуюся ошибку, которую можно исправить! Загрузите эти таблицы и запись из двоичного журнала по адресу ftp://support.mysql.com/pub/mysql/secret/ и пошлите письмо с описанием данной проблемы на[email protected]или (если вы являетесь коммерческим пользователем) на[email protected]- и команда разработчиков MySQL устранит ошибку настолько быстро, насколько это возможно.
Для локализации проблемы можно также использовать скрипт mysql_find_rows,
чтобы просто выполнить ряд обновляющих команд.