码迷,mamicode.com
首页 > 数据库 > 详细

mysql是怎么保证数据不丢失的

时间:2019-01-05 13:26:18      阅读:302      评论:0      收藏:0      [点我收藏+]

标签:inno   prepare   磁盘   瓶颈   技术   fsync   wal   syn   分享图片   

一:binlog写入机制。

技术分享图片

先write ,把日志写入文件系统的的page cache ,然后fsync 将数据持久化到磁盘的操作。

binlog是每个线程一个binlogCache,binlogCache中包含tmpfile和memery.

二:redo log 写入机制

技术分享图片

首先日志写道redologbuffer中,然后写入pagecache ,最后写入磁盘。

 

有个后台线程每一秒钟轮询redobuffer写入磁盘,一个没有提交事务的redolog也可以持久化到磁盘。

1,redolog buffer 占用的空间即将到达 innodb_log_buffer_size 一半。后台线程主动写盘

2.并行的事务提交,顺带将这个事务的redo log buffer 持久化到磁盘。

因为奔溃回复依赖prepare的redo log 再加上binlog来恢复的。innodb就认为redo log 在commit 的时候就不需要fsync了,只会write .

技术分享图片

 

 

 

 技术分享图片

技术分享图片

上边是mysql的组提交机制。

技术分享图片

 

 这是mysql的wal机制如何写日志的。

经过上边的分析,如何mysql 有性能瓶颈,在io上。有哪些方法提升性能?

技术分享图片

 

mysql是怎么保证数据不丢失的

标签:inno   prepare   磁盘   瓶颈   技术   fsync   wal   syn   分享图片   

原文地址:https://www.cnblogs.com/hanguocai/p/10223871.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!