mysql 强制innoDB恢复

https://dev.mysql.com/doc/refman/8.0/en/forcing-innodb-recovery.html

[mysqld]
innodb_force_recovery = 1

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

如果您能够转储innodb_force_recovery值为 3 或更小的表,则相对安全,因为只有损坏的单个页面上的某些数据丢失。值为 4 或更大将被视为危险,因为数据文件可能会永久损坏。值 6 被认为是剧烈的,因为数据库页处于过时状态,这反过来又可能会在 B 树和其他数据库结构中引入更多的损坏。

作为一项安全措施,当innodb_force_recovery大于 0 时,阻止插入、更新或删除操作。innodb_force_recovery在只读模式下设置 4 个或更多位置。InnoDBInnoDB

1 (SRV_FORCE_IGNORE_CORRUPT)
允许服务器运行,即使它检测到损坏的页面。尝试使SELECT*FROM tbl_名称跳过损坏的索引记录和页面,这有助于转储表。

2 (SRV_FORCE_NO_BACKGROUND)

阻止主线程和任何清除线程运行。如果在清除操作期间发生意外退出,则此恢复值将阻止它。

3 (SRV_FORCE_NO_TRX_UNDO)

崩溃恢复后不运行事务回滚。

4 (SRV_FORCE_NO_IBUF_MERGE)
防止插入缓冲区合并操作。如果它们会导致撞车,就不要这样做。不计算表统计信息。此值可能会永久损坏数据文件。使用此值后,请准备删除并重新创建所有二级索引。将InnoDB设置为只读。

5 (SRV_FORCE_NO_UNDO_LOG_SCAN)
启动数据库时不查看撤消日志:InnoDB甚至会将未完成的事务视为已提交。此值可能会永久损坏数据文件。将InnoDB设置为只读。

6 (SRV_FORCE_NO_LOG_REDO)
不执行与恢复相关的重做日志前滚。此值可能会永久损坏数据文件。使数据库页处于过时状态,这反过来可能会给B树和其他数据库结构带来更多损坏。将InnoDB设置为只读。

您可以从表中选择以转储它们。innodb_force_recovery值小于等于3时,可以删除或创建表。innodb_force_recovery值大于3也支持DROP TABLE。innodb_force_recovery值大于4时,不允许使用DROP TABLE。

如果知道给定的表在回滚时导致意外退出,则可以删除它。如果遇到由失败的大规模导入或ALTER TABLE导致的失控回滚,可以终止mysqld进程并将innodb_force_recovery设置为3,以便在不回滚的情况下启动数据库,然后删除导致失控回滚的表。

如果表数据中的损坏阻止您转储整个表内容,那么使用ORDER BY primary_key DESC子句的查询可能能够转储损坏部分之后的表部分。

如果启动innodb需要较高的innodb_force_recovery值,则可能存在损坏的数据结构,这可能会导致复杂查询(包含WHERE、ORDER BY或其他子句的查询)失败。在这种情况下,您可能只能运行基本的SELECT*FROM t查询。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值