Когда таблицы оказываются поврежденными или 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
,
чтобы просто выполнить ряд обновляющих команд.