MySQL之InnoDB的两个配置参数INNODB_FAST_SHUTDOWN和INNODB_FORCE_RECOVERY,用不好可能导致线上万数据丢失

前言

MySQL作为目前使用最广,最受认可的免费开源数据库,以其性能稳定、安全可靠、文档详尽等受到了各个厂商的青睐,是我们技术人必备的技能之一。

今天就来分享一下MySQL的两个重要参数,用不好轻松丢掉上万条数据。

1、INNODB_FAST_SHUTDOWN

看见shutdown那么大概率是跟InnoDB引擎关闭时有关。而他也确实是影响着InnoDB关闭着的行为。该参数有三个值可供选择:0,1,2

  • 0
    表示数据库在关闭时,InnoDB引擎会将所有的full purge、merge insert buffer,并且将所有的脏页刷新回磁盘。这个过程可能会花费几分钟甚至几个小时。
    full purge、merge insert buffer是什么,请参考文章《MySQL之InnoDB关键特性,爱她就要了解她》
    在升级InnoDB时,必须将参数设置为0,虽然会花费较长时间,但这是保持数据安全的有效措施。
  • 1
    该参数是InnoDB的默认值,设置为该值时表示,InnoDB引擎不需要完成full purge和merge insert buffer,但是需要完成脏页的刷盘操作。
  • 2
    表示不进行上述的三种操作,只是将日志都写入日志文件,这一种操作同样不会有任何事务的丢失,但是在下次启动数据库时,会进行恢复操作,需要耗费一定的时间。

2、INNODB_FORCE_RECOVERY

看见recovery那么大概率就是和数据库的数据恢复有关系了,实际上也确实是这样,所以在平时的编码中,见名知意是多么的重要,该参数共有6个值可供选择:0,1,2,3,4,5,6。大数字包含所有小数字包含的意义。

  • 0
    该值是引擎的默认值,表示需要进行恢复的时候,就进行所有的恢复操作,这里留个问题,是否所有的情况都需要进行恢复?在下面会稍微展开分析一下。
  • 1
    忽略检查到的corrupt页
  • 2
    阻止Master Thread线程的运行
  • 3
    不进行事务的回滚操作
  • 4
    不进行插入缓存的合并操作
  • 5
    不查看回滚日志,InnoDB引擎会将未提交的事务视为已提交
  • 6
    不进行前滚的操作

3、扩展

  1. innodb_fast_shutdown在升级的时候需要设置成0,防止升级过程中更新文件格式,导致数据的丢失。在没有丢失数据的风险前提下,在遇到紧急情况可以将其设置为2,以提高关闭速度
  2. InnoDB_force_recovery设置大于0的时候,insert、update和delete操作是不被允许的,设置大于或等于4时,数据库将变成只读模式。
  3. 是否所有的情况都需要进行恢复?我们考虑这样一种情况,如果修改共有1000万条数据的表,这个操作会产生大量的回滚日志,如果这时数据库崩溃了,那么数据库启动后就要进行回滚,肯定是需要花费较长的时间,此时可以利用备份进行恢复显然是一个更好的选择。

结语

道阻且长,行则将至,行而不辍,未来可期,加油。

如果你觉得文章不错,那么就给个小心心,如果觉得文章非常对你的胃口,那么欢迎你关注我,或者关注个人的微信公众号,咱们一起打怪升级。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿每日分享

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值