mysql保证数据的安全性

mysql 是日志先行的原则,在操作一条数据的时候,就会把旧数据插入undolog

在事务提交的时候,会把最新的数据保存在redolog表中

如下为:logbuffer刷盘的机制

 在事务提交之后,如果开启了binlog,则会把sql或者数据的前后变化保存在binlog中

undo.log和redo.log保证了数据的一致性,保证了数据库的安全

持久性:持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。即一旦一个事务提交,DBMS保证它对数据库中数据的改变应该是永久性的,耐得住任何数据库系统故障。持久性通过数据库备份和恢复来保证。

mysql中innodb_flush_log_at_trx_commit默认设置的是1,即最安全的设置

当设置为0的时候,mysql宕机会丢失前一秒的数据

当设置为1的时候,操作系统宕机,会丢失掉缓冲区的数据

 再来看另外一个参数sync_binlog :

sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。

sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。

mysql 8.0已经默认是1了, 当mysql宕机了,此时正好有一个事务没有提交,但是此时最新数据已经刷到redo表了,还没及时把sql信息刷到binlog日志,可能会造成短暂的binlog日志和表数据不一致的情况,当重启启动数据回滚之后,变成正常了

所以:innodb_flush_log_at_trx_commit =1 和sync_binlog = 1是数据库最安全的设置,当然业务数据库主要还是要保证数据的一致性,如果准求性能的话,可以把innodb_flush_log_at_trx_commit =2 和sync_binlog = 500/1000 ,但是这样风险挺大的

当innodb_flush_log_at_trx_commit =1 和sync_binlog = 1设置的时候,三个日志插入的顺序

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值