强制InnoDB恢复

Forcing InnoDB Recovery
要调查数据库页面损坏,你可以通过SELECT ... INTO OUTFILE语句dump你的表。通常,以这种方式获取的数据是完整的。 严重的损坏可能会导致SELECT * FROM tbl_name 语句或者 InnoDB 后台操作出现意外的退出或断言,甚至导致 InnoDBroll-forward recovery崩溃。这种情况下,你可以使用innodb_force_recovery选项来强制InnoDB存储引擎启动时不进行后台操作,这样你就可以dump你的表了。比如,你可以在重启服务器前将如下行添加到[mysqld] 部分:

[mysqld]
innodb_force_recovery = 1

关于如何配置 option files, 参考Section 4.2.2.2, “Using Option Files”

注意:
只有在紧急情况下可以设置 innodb_force_recovery 为大于0的值,这样你可以启动 InnoDB并dump你的表。在操作前,确保你已经拥有一份数据库的备份以防你需要重新创建。值>=4,可能会永久性的损坏数据文件。只有在另外一个独立的数据库物理副本上测试过 innodb_force_recovery>=4的值,才可以在生产环境上配置。 当强制 InnoDB recovery时,应该从 innodb_force_recovery=1 开始,并根据需要递增该值。

innodb_force_recovery 默认值为0 (正常启动,不强制恢复)。 innodb_force_recovery 允许的非0值为1 to 6。 较大的值包含较小值的功能。例如,值3包括值1和值2的所有功能。

如果你可以在 innodb_force_recovery值设置为3或以下的时候dump表,那么你相对是安全的,只有损坏页面上的一些数据会丢失。4及更大的值被认为是危险的,因为数据文件可能会永久损坏。 值设置为6则被认为是极度危险的,因为数据库页处于过时状态,反过来可能会给 B-trees和其他数据库结构带来更多损坏。

作为安全措施,当innodb_force_recovery大于0时,InnoDB 阻止 INSERT, UPDATE, or DELETE 操作。从MySQL5.6.15开始,innodb_force_recovery设置为4或更高将使innodb处于只读模式。

  • 1 (SRV_FORCE_IGNORE_CORRUPT)

    即使检测到损坏的page,服务器也要运行。尝试使SELECT * FROM tbl_name跳过损坏的索引记录和页,有助于dump表。

  • 2 (SRV_FORCE_NO_BACKGROUND)

    阻止master thread 和任何 purge threads 运行。如果在purge操作期间出现异常退出,该值会阻止它。

  • 3 (SRV_FORCE_NO_TRX_UNDO)

    crash recovery之后,不运行事务rollbacks

  • 4 (SRV_FORCE_NO_IBUF_MERGE)

    阻止 insert buffer 合并操作。如果它们可能导致崩溃,那就不要做。不要计算table statistics。该值可能会永久损坏数据文件。使用该值,要准备好删除和重建所有的辅助索引。MySQL 5.6.15后,设置InnoDB为只读。

  • 5 (SRV_FORCE_NO_UNDO_LOG_SCAN)

    启动数据库时不查看 undo logsInnoDB甚至将不完整的事务视为已提交。该值可能会永久损坏数据文件。MySQL 5.6.15后,设置InnoDB为只读。

  • 6 (SRV_FORCE_NO_LOG_REDO)

    不执行 redo log 回滚。该值可能会永久损坏数据文件。将数据库页处于过时状态,可能会反过来造成B-trees和其他数据库结构的损坏。MySQL 5.6.15后,设置InnoDB为只读。

你可以使用SELECT 来dump表。设置innodb_force_recovery 值为 3 或更小,你可以DROP or CREATE 表。MySQL 5.6.27后, DROP TABLEinnodb_force_recovery 值大于3时也是支持的。

如果你直到一个给定的表可能会导致异常退出或回滚,你可以删除它。如果遇到由于批量导入或ALTER TABLE失败而导致的失控回滚,你可以kill mysqld 进程,然后设置 innodb_force_recovery3 来使数据库启动而不回滚,然后 DROP导致失控回滚的表。

如果表数据损坏阻止了dump整个表的内容,使用ORDER BY primary_key DES 条件可能会导出损坏部分后面的表。

如果需要设置一个高的innodb_force_recovery值来启动 InnoDB,损坏的数据结构可能会导致复杂的查询 (包含 WHERE, ORDER BY, 或其他条件的查询) 失败。这种情况下,你只能使用基本查询 SELECT * FROM t

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容