暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

程序猿每日分享 2021-11-24
188

前言

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关键特性,爱她就要了解她》
行则将zhi,公众号:程序猿每日分享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万条数据的表,这个操作会产生大量的回滚日志,如果这时数据库崩溃了,那么数据库启动后就要进行回滚,肯定是需要花费较长的时间,此时可以利用备份进行恢复显然是一个更好的选择。

结语

最后如果你对技术有热爱,你对编程有热情,欢迎加入程序猿大家庭,咱们一起成长,一起进步。

如果你喜欢本文

请长按二维码,关注程序猿每日分享

转发至朋友圈,是对我最大的支持


点个在看
小时候有种感觉叫喜欢
长大后有种支持叫再看
💕💕💕💕💕💕


文章转载自程序猿每日分享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论