MySQL InnoDB表空损坏数据库无法启动

· back's秘密花园


记一次mysql数据库崩坏,起因是由于同事没有控制速率直接跑库导致mysql数据库损坏,故有了此次mysql修复经验。

直接说解决方法: #

  1. 找到mysql my.cnf 修改innodb_force_recovery等级 (一般在/etc/my.cnf )

    1#忽略检查,有6个级别
    2innodb_force_recovery=6 
    31 (SRV_FORCE_IGNORE_CORRUPT): 忽略检查到的 corrupt 页。尽管检测到了损坏的 page 仍强制服务运行。一般设置为该值即可,然后 dump 出库表进行重建。
    42 (SRV_FORCE_NO_BACKGROUND): 阻止主线程的运行,如主线程需要执行 full purge 操作,会导致 crash。 阻止 master thread 和任何 purge thread 运行。若 crash 发生在 purge 环节则使用该值。
    53 (SRV_FORCE_NO_TRX_UNDO): 不执行事务回滚操作。
    64 (SRV_FORCE_NO_IBUF_MERGE): 不执行插入缓冲的合并操作。如果可能导致崩溃则不要做这些操作。不要进行统计操作。该值可能永久损坏数据文件。若使用了该值,则将来要删除和重建辅助索引。
    75 (SRV_FORCE_NO_UNDO_LOG_SCAN): 不查看重做日志,InnoDB 存储引擎会将未提交的事务视为已提交。此时 InnoDB 甚至把未完成的事务按照提交处理。该值可能永久性的损坏数据文件。
    86 (SRV_FORCE_NO_LOG_REDO): 不执行前滚的操作。恢复时不做 redo log roll-forward。使数据库页处于废止状态,继而可能引起 B 树或者其他数据库结构更多的损坏。
    
  2. 建议是从1开始逐级往上加,mysql能正常启动就行

  3. 这个情况下数据库是可读状态,但是不可写入,需要将数据库全量备份下来

  4. 重装mysql,导入备份数据


风筝在阴天搁浅🪁

想念还在等待救援

我拉着线

复习妳给的温柔