前言
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、扩展
- innodb_fast_shutdown在升级的时候需要设置成0,防止升级过程中更新文件格式,导致数据的丢失。在没有丢失数据的风险前提下,在遇到紧急情况可以将其设置为2,以提高关闭速度
- InnoDB_force_recovery设置大于0的时候,insert、update和delete操作是不被允许的,设置大于或等于4时,数据库将变成只读模式。
- 是否所有的情况都需要进行恢复?我们考虑这样一种情况,如果修改共有1000万条数据的表,这个操作会产生大量的回滚日志,如果这时数据库崩溃了,那么数据库启动后就要进行回滚,肯定是需要花费较长的时间,此时可以利用备份进行恢复显然是一个更好的选择。
结语
道阻且长,行则将至,行而不辍,未来可期,加油。
如果你觉得文章不错,那么就给个小心心,如果觉得文章非常对你的胃口,那么欢迎你关注我,或者关注个人的微信公众号,咱们一起打怪升级。