16.MySQL是怎么保证数据不丢的?2022-03-09

一、binlog的写入机制

图1:binlog的写入过程
  • 事务的执行过程是先把日志存入binglog cache,存入的大小可以由参数binlog_cache_size 控制,如果缓存不够大,会暂存到磁盘中,事务提交的时候,执行器会把日志存入binlog中,并清空binglog cache。

  • 执行write操作的时候速度比较快,这时binlog并没有进行持久化,只有执行了fsync操作后才会执行(这个时候才会占用磁盘的IOPS)。

1.write 和 fsync 的时机怎么控制

由sync_binlog控制:
1.当sync_binlog = 0 时,只执行write操作,不执行fsync操作
2.当sync_binglog = 1时,每个线程执行完write都要执行fsync操作
3.当sync_binglog = N(N>1),执行完N个write操作后执行一次fsync.

通常业务中会选择3,N在100-1000之间,但是值得注意的是,如果数据库宕机,可能会造成N个事务的日志丢失。

二、redo log的写入机制

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容