Non c'è nulla che tu possa veramente fare perché un rollback viene eseguito tramite il tablespace UNDO all'interno di ibdata1 , che dovrebbe essere cresciuto immensamente.
Se si interrompe il processo mysqld e si riavvia mysql, riprenderà da dove era stato interrotto come parte del ciclo di recupero da crash.
DISCLAIMER: non responsabile per la perdita di dati
Quello che potresti fare potrebbe comportare la perdita di dati per altre tabelle, ma c'è qualcosa che puoi fare per aggirare il normale ciclo di recupero da crash di InnoDB.
Esiste un'opzione di avvio denominata innodb_force_recovery , che consente di ignorare varie fasi del ripristino da crash di InnoDB.
Secondo la documentazione MySQL su Forcing InnoDB Recovery , ecco le impostazioni e i suoi effetti:
1 (SRV_FORCE_IGNORE_CORRUPT)
Lascia che il server funzioni anche se rileva una pagina danneggiata. Prova a fare in modo che SELECT * FROM tbl_name salti i record e le pagine di indice danneggiati, il che aiuta a scaricare le tabelle.
2 (SRV_FORCE_NO_BACKGROUND)
Impedisci l'esecuzione del thread principale. Se si verifica un arresto anomalo durante l'operazione di eliminazione, questo valore di ripristino lo impedisce.
3 (SRV_FORCE_NO_TRX_UNDO)
Non eseguire i rollback delle transazioni dopo il ripristino di emergenza.
4 (SRV_FORCE_NO_IBUF_MERGE)
Impedisci operazioni di unione del buffer di inserimento. Se provocherebbero un arresto, non eseguirli. Non calcolare le statistiche della tabella.
5 (SRV_FORCE_NO_UNDO_LOG_SCAN)
Non guardare i registri di annullamento all'avvio del database: InnoDB considera impegnate anche le transazioni incomplete.
6 (SRV_FORCE_NO_LOG_REDO)
Non eseguire il roll-forward del registro di ripetizione in connessione con il ripristino.
Con le modifiche transazionali nascoste nei registri UNDO e REDO, si corre il rischio di
- perdere dati significava essere scritti
- conservare i dati destinati ad essere eliminati
Nel caso in cui si prevedano effetti collaterali negativi, eseguire il backup dell'intero / var / lib / mysql e metterlo da qualche parte nel caso in cui si desideri copiare ibdata1, ib_logfile0 e ib_logfile1 e riprovare il normale ripristino.
Se mysql è completamente attivo in una delle modalità
- mysqldump tutti i dati tranne la tabella offensiva
- spegnimento mysql
- rimuovi tutto in / var / lib / mysql tranne / var / lib / mysql / mysql
- avvia mysql
- ricaricare il mysqldump
CAVEAT: assicurati di eseguire il backup di tutto !!!
Spero che possa aiutare !!!