Innodb恢复--innodb_force_recovery

简介:

  Innodb事务型存储引擎,通过redo,undo,double write这些特性保证数据的完整,针对硬件故障,内核bug,突然断电的事件,需要手动对Innodb进行恢复;

    可以将Innodb page 损坏分为几类,data page 损坏,secondary_index page 损坏, root index 损坏,data dictionary 损坏,恢复的难度依次增加;与朋友一起恢复innodb的时候,重新认识了下innodb_force_recovery;

    最初对innodb_force_recovery 的认识只是错误的停留在 它只针对无法启动的时候使用,1-6的参数,对损坏数据只在启动的时候不去检查;后来才明白启用该参数后,MySQL redo only 就是为了保证对应参数里面的值,不启用后台thread的任何检查直至设置innodb_force_recovery=0才可以,同时跟大家分享下, check table 的结果对于innodb 是不可信的(明明error log报page错误,但检测结果仍是ok) (以下内容多参考官网)

    innodb_force_recovery 在使用的时候,能尽量从1-6依次递增,=3的时候,已经包括 =1 和=2的处理情况,一般 = 1-3的时候,数据的完整性相对来说还是可以保证的(除了已经损坏的部分),>=4 的时候可能造成 page处于一种相对“过时”(obsolete state),(如果不进行重建损坏的表),可能造成B-trees and other database structures 的损坏,>0 的时候,INSERT,UPDATE,DELETE这些操作都是禁止的,下面介绍下各个参数的具体含义:

        1 (SRV_FORCE_IGNORE_CORRUPT):

         强制忽略corrupt page并自动跳过,期间可以dump table;

        2 (SRV_FORCE_NO_BACKGROUND):

        在前置忽略corrupt page 的基础上(包含=1的作用),阻塞 master thread 和 任何的 purge thread 运行(有效防止在purge的时候发生MySQL crash)

        3 (SRV_FORCE_NO_TRX_UNDO):

        在忽略 corrupt page,阻塞 purge thread的基础上,不进行 transaction rollback;

    4 (SRV_FORCE_NO_IBUF_MERGE):

    在忽略 corrupt page,阻塞 purge thread,禁止 transaction rollback 基础上,禁止 merge  insert buffer,对 table statistics 不进行更新;(这样会损坏 data file,等恢复后最好重建所有的secondary index);

        5 (SRV_FORCE_NO_UNDO_LOG_SCAN):

        在忽略 corrupt page ,阻塞purge thread,禁止 transaction rollback,禁止merge insert buffer,停止 table statistic 的基础上,在启动 MySQL的时候,不在扫描 undo logs,对待incomplete transactions as committed;

        6 (SRV_FORCE_NO_LOG_REDO):

        在以上所有的基础上,redo log 不进行前滚(roll-forward)

        这里再次提醒下,对Innodb_force_recovery的赋值最好是依次递增(除非自己做过严格测试)

         

        

    






本文转自 位鹏飞 51CTO博客,原文链接:http://blog.51cto.com/weipengfei/1564235,如需转载请自行联系原作者

目录
打赏
0
0
0
0
18
分享
相关文章
【案例】利用innodb_force_recovery 解决MySQL服务器crash无法重启问题
一 背景    某一创业的朋友的主机因为磁盘阵列损坏机器crash,重启MySQL服务时 报如下错误: InnoDB: Reading tablespace information from the .
1507 0
修改innodb_buffer_pool_instances解决mysqlbinlog恢复慢的问题
一个客户的mysql数据库恢复在最后一步是滚binlog,结果恢复特别慢,CPU占用率100%,磁盘IO几乎是零,show processlist发现线程在sleep。从general log里面看不到任何动静,似乎找不到解决的办法。
402 0
【MySQL】sync_binlog innodb_flush_log_at_trx_commit 浅析
 innodb_flush_log_at_trx_commit和sync_binlog 两个参数是控制MySQL 磁盘写入策略以及数据安全性的关键参数。本文从参数含义,性能,安全角度阐述两个参数为不同的值时对db 性能,数据的影响.
1456 0
[20180423]表空间闪回与snapshot standby
[20180423]flashback tablespace与snapshot standby.txt --//缺省建立表空间是打开flashback on,如果某个表空间flashback off,在dg启动snapshot standby时注意,可能"回不来", --//通过测试说明问题.
1293 0
MySQL HA架构下innodb_flush_log_at_trx_commit及sync_binlog参数
      HeartBeat + DRBD以及MySQL replication是很多企业比较普遍使用的方式。对于数据的完整性和一致性的问题,这两种架构需要考虑2个重要的参数innodb_flush_log_at_trx_commit以及sync_binlog参数。
1289 0
Innodb:为什么lock in share mode在show engine看不到行锁信息
水平有限 有误请指出版本:Percona MySQL 5.7.22对于锁的学习我做了一些输出详细参考如下:https://github.com/gaopengcarl/percona-server-locks-detail-5.7.22.git其中有readme 一、问题提出 不知道有没有朋友和我一样用lock in share mode做加锁实验,但是却在show engine innodb status中看不到加锁信息,今天刚好有朋友在问@在树枝上吹风,今天就做了一下简单的debug,因为我也挺纳闷的。
4365 0
MySQL `innodb_flush_log_at_trx_commit` 参数
MySQL `innodb_flush_log_at_trx_commit` 参数
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等