Назад | Перейти на главную страницу

MySQL InnoDB Corruption после отключения электроэнергии, возможно ли восстановить?

Недавно я начал пытаться запустить Redmine после отключения электроэнергии, которое, похоже, повредило нашу базу данных InnoDB в MySQL. У Redmine был обширный набор документации, которую я хотел бы получить, даже если Redmine не сможет работать. Служба не работает при запуске. Я попытался вставить innodb_force_recovery = 4 в документацию по URL-адресу в журнале ошибок. (также пробовал с 1 по 6, так как я сделал резервную копию всех каталогов после повреждения) Я проверил с помощью "mysqld-nt --print-defaults", что он запускается с опцией восстановления в параметрах.

Машина работает под управлением Windows Server 2003 SP2, Xeon E5335 с 2 ГБ ОЗУ, MySQL не зеркалируется на другой компьютер, и машина не является зеркалом. У меня нет резервных копий, потому что предыдущий пользователь их не настраивал.

Вот журнал ошибок:

InnoDB: The log sequence number in ibdata files does not match
InnoDB: the log sequence number in the ib_logfiles!
100308 14:50:01  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
100308 14:50:02  InnoDB: Error: page 7 log sequence number 0 935521175
InnoDB: is in the future! Current system log sequence number 0 933419020.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.0/en/forcing-recovery.html
InnoDB: for more information.
100308 14:50:02  InnoDB: Error: page 2 log sequence number 0 935517607
InnoDB: is in the future! Current system log sequence number 0 933419020.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.0/en/forcing-recovery.html
InnoDB: for more information.
100308 14:50:02  InnoDB: Error: page 11 log sequence number 0 935517607
InnoDB: is in the future! Current system log sequence number 0 933419020.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.0/en/forcing-recovery.html
InnoDB: for more information.
100308 14:50:02  InnoDB: Error: page 5 log sequence number 0 972973045
InnoDB: is in the future! Current system log sequence number 0 933419020.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.0/en/forcing-recovery.html
InnoDB: for more information.
100308 14:50:02  InnoDB: Error: page 6 log sequence number 0 972984051
InnoDB: is in the future! Current system log sequence number 0 933419020.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.0/en/forcing-recovery.html
InnoDB: for more information.
100308 14:50:02  InnoDB: Error: page 1577 log sequence number 0 972737368
InnoDB: is in the future! Current system log sequence number 0 933419020.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.0/en/forcing-recovery.html
InnoDB: for more information.
InnoDB: Error: trying to access page number 4294965119 in space 0,
InnoDB: space name .\ibdata1,
InnoDB: which is outside the tablespace bounds.
InnoDB: Byte offset 0, len 16384, i/o type 10.
InnoDB: If you get this error at mysqld startup, please check that
InnoDB: your my.cnf matches the ibdata files that you have in the
InnoDB: MySQL server.
100308 14:50:02InnoDB: Assertion failure in thread 960 in file .\fil\fil0fil.c line 3959
InnoDB: We intentionally generate a memory trap.
InnoDB: Submit a detailed bug report to http://bugs.mysql.com.
InnoDB: If you get repeated assertion failures or crashes, even
InnoDB: immediately after the mysqld startup, there may be
InnoDB: corruption in the InnoDB tablespace. Please refer to
InnoDB: http://dev.mysql.com/doc/refman/5.0/en/forcing-recovery.html
InnoDB: about forcing recovery.
100308 14:50:02 [ERROR] mysqld-nt: Got signal 11. Aborting!

100308 14:50:02 [ERROR] Aborting

100308 14:50:02 [Note] mysqld-nt: Shutdown complete

Недавно я столкнулся с этой проблемой и не смог «восстановить» как таковой, но смог использовать mysqldump, пока был установлен innodb_force_recovery, и позже воссоздал с ним БД. Если вы не можете выгрузить данные из-за ошибок, см.:

http://www.mysqlperformanceblog.com/2008/07/04/recovering-innodb-table-corruption/

Для стратегии найти «плохие» данные и выбросить «хорошие».

100308 14:50:02 InnoDB: Ошибка: порядковый номер журнала страницы 7 0 935521175 InnoDB: в будущем

MySQL чувствителен к дате и времени и временным меткам файлов. Убедитесь, что дата и время обновлены, и проверьте отметку времени в файле журнала.