zoukankan      html  css  js  c++  java
  • 记一次mysql 异常停电数据库损坏恢复的方法

    mysql innodb 引擎损坏恢复的参考资料还是很多的,以下记录一个问题的处理

    问题

    异常停电,mysql 重启异常,innodb tablespace 异常

    一般常见的解决方法

    备份,删除ibdata1,ib_logfile* 等文件,配置

    innodb_force_recovery = 6
    innodb_purge_threads = 1

    然后尝试重启

    简单说明

    以上方法不直接推荐使用,理论上先备份是最好的,也是应该做的,然后逐步尝试从1-6进行增加处理
    当然不同的步骤进行的操作是不一样的,如果1可以进入(先备份),同时可以链接数据库特别好,链接
    进行数据备份(很重要),然后尝试不同的级别,查看mysql server log,查看信息,一般会有提示信息的
    告诉我们那种表的有异常(也可以使用mysqlcheck工具)

    碰到的几个问题

    可能系统比较好,异常停电的时候,1 可以进入然后就进行了备份操作(dump),然后就打算使用6模式
    进行数据处理了(首先进行了db 数据备份),然后删除ibdata1,ib_logfile* 结果提示table 不存在,感觉
    不对,然后基于已有的备份,直接替换删除的文件,还是使用6模式,特别好,直接可以访问数据库,同时
    给了一个比较好的err 提示(mysql server 日志)index 异常(就一张表,特别好),因为上边已经备份了
    数据库,为了方便又进行了异常索引表数据的备份,因为模式是6不能进行删除操作,所以在系统db 创建了
    又异常的表,停止mysql 然后copy 了frm文件到有问题的db 系统,然后修改模式为1,此模式下我们可以进行
    数据表的操作,然后我们删除了有异常的table,重新导入数据进行恢复,之后停止mysql,修改innodb_force_recovery
    为默认的,启动mysql 测试发现系统已经正常了,实际上我们全程可以基于1模式进行数据库的恢复

    总结

    进行恢复的时候尽备份很重要,遇到问题不能着急,应该思考下(尤其比较重要的db系统),同时对于依赖db的系统
    也应该进行可能的停机(避免数据不一致的操作),官方文档是特别好的资料,不能直接百度搜索解决问题

    参考资料

    https://dev.mysql.com/doc/refman/8.0/en/forcing-innodb-recovery.html
    https://www.askmaclean.com/archives/innodb-corruption-recover-guide.html

  • 相关阅读:
    学到了林海峰,武沛齐讲的Day20 装饰器
    学到了林海峰,武沛齐讲的Day19 迭代细讲
    学到了林海峰,武沛齐讲的Day18 迭代
    学到了林海峰,武沛齐讲的Day18-4 文件操作
    hdu1106 java字符串分割
    hdu1282 回文数猜想
    hud1047 java大数忽略空格
    hdu1018 阶乘位数的数学原理
    hdu1715 java解大菲波数
    hdu1316 java解高精度斐波数
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/14203707.html
Copyright © 2011-2022 走看看