追着幸福跑|数据库没有备份,没有使用Binlog的情况下,如何恢复数据?( 二 )
如果已经开启了 Binlog , 就可以使用闪回工具 , 比如 mysqlbinlog 或者 binlog2sql , 从工具名称中也能看出来它们都是基于 Binlog 来做的闪回 。 原理就是因为 Binlog 文件本身保存了数据库更新的事件(Event) , 通过这些事件可以帮我们重现数据库的所有更新变化 , 也就是 Binlog 回滚
innodb_force_recovery参数一共有 7 种状态 , 除了默认的 0 以外 , 还可以为 1-6 的取值 , 分别代表不同的强制恢复措施 。
当我们需要强制恢复的时候 , 可以将innodb_force_recovery设置为 1 , 表示即使发现了损坏页也可以继续让服务运行 , 这样我们就可以读取数据表 , 并且对当前损坏的数据表进行分析和备份 。
通常innodb_force_recovery参数设置为 1 , 只要能正常读取数据表即可 。 但如果参数设置为 1 之后还无法读取数据表 , 我们可以将参数逐一增加 , 比如 2、3 等 。 一般来说不需要将参数设置到 4 或以上 , 因为这有可能对数据文件造成永久破坏 。 另外当innodb_force_recovery设置为大于 0 时 , 相当于对 InnoDB 进行了写保护 , 只能进行 SELECT 读取操作 , 还是有限制的读取 , 对于 WHERE 条件以及 ORDER BY 都无法进行操作 。
当我们开启了强制恢复之后 , 数据库的功能会受到很多限制 , 我们需要尽快把有问题的数据表备份出来 , 完成数据恢复操作 。 整体的恢复步骤可以按照下面的思路进行:
- 使用innodb_force_recovery启动服务器将innodb_force_recovery参数设置为 1 , 启动数据库 。 如果数据表不能正常读取 , 需要调大参数直到能读取数据为止 。 通常设置为 1 即可 。
- 备份数据表在备份数据之前 , 需要准备一个新的数据表 , 这里需要使用 MyISAM 存储引擎 。 原因很简单 , InnoDB 存储引擎已经写保护了 , 无法将数据备份出来 。 然后将损坏的 InnoDB 数据表备份到新的 MyISAM 数据表中 。
- 删除旧表 , 改名新表数据备份完成之后 , 我们可以删除掉原有损坏的 InnoDB 数据表 , 然后将新表进行改名 。
- 关闭innodb_force_recovery , 并重启数据库innodb_force_recovery大于 1 的时候会有很多限制 , 我们需要将该功能关闭 , 然后重启数据库 , 并且将数据表的 MyISAM 存储引擎更新为 InnoDB 存储引擎 。
分享、点赞、在看 , 给个三连击呗!
推荐阅读
- 笙笙千离|惠若琪李宇春同框颁奖,春春身高176还自卑,巨人身高收获幸福
- 资讯早知道|9年后再看《步步惊心》,发现若曦无论跟谁都不会幸福
- 弹钢琴|原创吉娜为1岁宠物兔庆生,郎朗弹钢琴助兴,幸福温馨像一家三口
- 人民日报|岳阳君山区:消费扶贫托起贫困户稳稳的幸福
- “全国人大 ”微信公众号|何健忠:以实施民法典提升人民美好生活的“幸福指数”
- 经济日报-中国经济网|【幸福花开新边疆】219国道旁的“脱贫事”
- 新华网|【幸福花开新边疆】奋发学技能 靠己奔小康
- 【幸福花开新边疆】奋发学技能 靠己奔小康
- 【幸福花开新边疆】219国道旁的“脱贫事”
- 岳阳君山区:消费扶贫托起贫困户稳稳的幸福