:: DEVELOPER ZONE
Когда таблицы оказываются поврежденными или 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/ и пошлите письмо с описанием
данной проблемы на bugs@lists.mysql.com
или (если вы являетесь
коммерческим пользователем) на support@mysql.com
- и команда
разработчиков MySQL устранит ошибку настолько быстро, насколько это
возможно.
Для локализации проблемы можно также использовать скрипт mysql_find_rows
,
чтобы просто выполнить ряд обновляющих команд.
© 1995-2005 MySQL AB. All rights reserved.