На самом деле вы ничего не можете сделать, потому что откат выполняется через табличное пространство UNDO внутри ibdata1 , которое должно было бы значительно увеличиться .
Если вы убьете процесс mysqld и перезапустите mysql, он просто перехватит с того места, на котором остановился, как часть цикла восстановления после сбоя.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: не несет ответственности за потерю данных
То, что вы можете сделать, может привести к потере данных для других таблиц, но есть что-то, что вы можете сделать, чтобы обойти обычный цикл восстановления после сбоя InnoDB.
Существует опция запуска, называемая innodb_force_recovery , которая позволяет обойти различные этапы восстановления после сбоя InnoDB.
Согласно документации MySQL по принудительному восстановлению InnoDB , здесь приведены настройки и их эффекты:
1 (SRV_FORCE_IGNORE_CORRUPT)
Позвольте серверу работать, даже если он обнаружит поврежденную страницу. Попробуйте заставить SELECT * FROM tbl_name перепрыгивать поврежденные индексные записи и страницы, что помогает при выводе таблиц.
2 (SRV_FORCE_NO_BACKGROUND)
Запретить запуск основного потока. Если во время операции очистки произойдет сбой, это значение восстановления предотвращает это.
3 (SRV_FORCE_NO_TRX_UNDO)
Не запускайте откат транзакций после восстановления после сбоя.
4 (SRV_FORCE_NO_IBUF_MERGE)
Запретить операции слияния буфера вставки. Если они вызовут сбой, не делайте их. Не рассчитывайте статистику таблицы.
5 (SRV_FORCE_NO_UNDO_LOG_SCAN)
Не просматривайте журналы отмены при запуске базы данных: InnoDB обрабатывает даже незавершенные транзакции как зафиксированные.
6 (SRV_FORCE_NO_LOG_REDO)
Не выполняйте откат журнала повторения в связи с восстановлением.
С транзакционными изменениями, скрытыми в журналах UNDO и REDO, вы рискуете
- потеря данных, предназначенных для записи
- хранение данных, предназначенных для удаления
Если вы ожидаете плохих побочных эффектов, сделайте резервную копию всего / var / lib / mysql и поместите его куда-нибудь на тот случай, если вы захотите скопировать ibdata1, ib_logfile0 и ib_logfile1 и повторить нормальное восстановление.
Если mysql полностью включен в одном из режимов
- mysqldump все данные, кроме таблицы с ошибками
- отключение mysql
- удалите все в / var / lib / mysql, кроме / var / lib / mysql / mysql
- начать MySQL
- перезагрузите mysqldump
ПРЕДУПРЕЖДЕНИЕ: убедитесь, что вы резервное копирование все!
Надеюсь, это поможет !!!