Главная » Ошибки Битрикс » Table is marked as crashed: восстановление таблиц MySQL

Table is marked as crashed: восстановление таблиц MySQL

Схема восстановления повреждённой таблицы MySQL через REPAIR TABLE в 1С-Битрикс

Ошибка "Table '...' is marked as crashed" в логах MySQL означает повреждение служебной структуры таблицы, обычно движка MyISAM, из-за некорректного завершения работы сервера или диска. Разберём, как это восстановить на сайте 1С-Битрикс, не потеряв данные.

Почему возникает эта ошибка

Повреждение таблицы чаще всего связано с внезапным завершением работы MySQL — аварийная перезагрузка сервера, заполнение диска до нуля свободного места во время операции записи, сбой файловой системы. Таблицы движка MyISAM (в отличие от InnoDB с его журналированием транзакций) более уязвимы к такому повреждению, поскольку не имеют встроенного механизма восстановления после некорректного завершения записи.

Первый шаг: определить, какая таблица повреждена

tail -100 /var/log/mysql/error.log | grep -i crashed

Лог ошибок MySQL обычно явно называет конкретную повреждённую таблицу — эта информация нужна для точечного восстановления, а не попытки проверить и восстановить все таблицы базы данных сразу, что заметно дольше на большой базе.

Нужна помощь с Битрикс?





    Восстановление через REPAIR TABLE

    mysql -u root -p
    
    USE bitrix_db;
    REPAIR TABLE b_iblock_element;

    Команда REPAIR TABLE — стандартный способ восстановления повреждённой таблицы MyISAM: MySQL пытается перестроить индексы и структуру таблицы, сохраняя данные, где это возможно. Перед выполнением на боевой базе обязательна резервная копия, поскольку в редких случаях восстановление может не суметь вернуть все данные без потерь, если повреждение оказалось слишком серьёзным.

    Восстановление через консольную утилиту myisamchk

    # остановить MySQL перед использованием myisamchk на файлах напрямую
    systemctl stop mysql
    
    myisamchk --recover /var/lib/mysql/bitrix_db/b_iblock_element.MYI
    
    systemctl start mysql

    Для случаев, когда REPAIR TABLE через SQL-интерфейс не срабатывает (сам сервер MySQL не может даже открыть таблицу для восстановления), консольная утилита myisamchk работает напрямую с файлами таблицы на диске, но требует остановки MySQL на время операции, что означает недоступность сайта на этот период.

    Проверка на исчерпание места на диске как первопричину

    df -h

    Если причиной повреждения стало заполнение диска до конца, восстановление таблицы без освобождения места на диске рискует привести к повторному повреждению в ближайшее время, — стоит сначала устранить первопричину (освободить место, настроить мониторинг заполнения диска), а не только восстановить симптом в виде конкретной повреждённой таблицы.

    Миграция на InnoDB для устойчивости в будущем

    ALTER TABLE b_iblock_element ENGINE=InnoDB;

    Таблицы движка InnoDB значительно устойчивее к повреждению при аварийном завершении благодаря журналированию транзакций — для проекта, регулярно сталкивающегося с повреждением таблиц MyISAM, миграция критичных таблиц на InnoDB снижает риск повторения проблемы в будущем, хотя современные установки Битрикса по умолчанию уже используют InnoDB для большинства таблиц ядра.

    Проверка целостности данных после восстановления

    После успешного REPAIR TABLE стоит явно проверить, что данные реально корректны — сверить количество записей с ожидаемым (если есть представление о примерном объёме до сбоя) и визуально проверить работу сайта в разделах, использующих восстановленную таблицу, а не считать восстановление автоматически полным без проверки на практике.

    Частые ошибки

    • Восстановление запущено без резервной копии. В редких случаях серьёзного повреждения часть данных может быть потеряна без возможности отката.
    • Первопричина (заполненный диск) не устранена перед восстановлением. Риск повторного повреждения в ближайшее время после восстановления.
    • Результат восстановления не проверен на практике. Формально успешный REPAIR TABLE не гарантирует полной сохранности всех данных без визуальной проверки.

    Итог

    Повреждённая таблица MySQL восстанавливается через REPAIR TABLE или, в более серьёзных случаях, через консольный myisamchk при остановленном сервере MySQL, — но перед восстановлением обязательна резервная копия, а после — проверка первопричины сбоя (часто заполнение диска), которую нужно устранить, чтобы повреждение не повторилось в ближайшее время.

    Нужна помощь с Битрикс?

    Исправим ошибку, доработаем сайт, ускорим Битрикс или поможем разобраться с проблемой.

    Услуги
    Инструменты
    База знаний