Насправді ви нічого не можете зробити, тому що відкат робиться через таблицю просторів 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
CAVEAT: Переконайтесь, що ви створили резервну копію всього !!!
Я сподіваюся, що це допомагає !!!