当前位置:网站首页>Mysql 45讲学习笔记(二十三)MYSQL怎么保证数据不丢
Mysql 45讲学习笔记(二十三)MYSQL怎么保证数据不丢
2022-07-31 02:50:00 【孔汤姆】
一.binlog的写入机制
执行逻辑:
- 事务执行过程中,先把日志写到binlog cache,
- 事务提交的时候再把binlog cache写到binlog文件中
binlog cache
- 系统binlog cache分配了一片内存,每个线程一个
- 参数binlog_cache_size用于控制单个线程内binlog cache所占内存的大小
- 如果超过了这个参数规定的大小,就要暂存到磁盘
事务提交时:
- 执行器把binlog cache里的完整事务写入binlog中,并清空binlog cache
二.Redo log的写入机制
redo log的三种状态:
- 存在redo log buffer中,物理上是在MySQL进程内存中
- 写在磁盘(write),但没有持久化(fsync),物理上是在文件系统的page cache里面
- 持久化到磁盘,对应的是hard disk
存在问题:
日志写到redo log buffer 是很快的,write到page cache也差不多,但是持久化到磁盘的速度很慢
innodb_flush_log_at_trx_commit 参数
0 | 表示每次提交事务都把redo log留在redo log buffer中 |
1 | 表示每次事务提交时都将redo log 直接持久化到磁盘 |
2 | 表示每次事务提交时都只把redo log写到page cache |
- InnoDB有一个后台 线程,每隔1秒,就会把redo log buffer中的日志,调用write写到文件系统的page cache,然后调fsync 持久化到磁盘
- 事务执行中间过程的redo log也是直接写在redo log buffer中的
- 也可能被后台线程一起持久化到磁盘中。
- 一个没有提交的事务的redo log可能已经持久化到磁盘。
三.没提交的redo log写入磁盘的两个场景:
- redo log buffer占用的空间即将达到innodb_log_buffer_size一半的时候,后台线程会主动写盘
- 并行事务提交的时候,顺带将这个事务的redo log buffer 持久化到磁盘
两阶段提交:
时序上redo log先prepare再写binlog最后再把redo log commit
组提交(group commit)机制
边栏推荐
猜你喜欢
221. Largest Square
MPPT solar charge controller data collection - through the gateway acquisition capacity battery SOC battery voltage, wi-fi
The final exam first year course
关于 mysql8.0数据库中主键位id,使用replace插入id为0时,实际id插入后自增导致数据重复插入 的解决方法
YOLOV5学习笔记(二)——环境安装+运行+训练
String为什么不可变?
Huawei od dice js
Project (5) - Small target detection tph-yolov5
共模电感的仿真应用来了,满满的干货送给大家
Face detection based on opencv
随机推荐
什么是分布式锁?实现分布式锁的三种方式
英特尔软硬优化,赋能东软加速智慧医疗时代到来
Mycat's master-slave relationship, vertical sub-database, horizontal sub-table, and detailed configuration of mycat fragmented table query (mysql5.7 series)
局域网电脑硬件信息收集工具
STM32CUBEMX develops GD32F303 (11) ---- ADC scans multiple channels in DMA mode
mycat的主从关系 垂直分库 水平分表 以及mycat分片联表查询的配置详解(mysql5.7系列)
[C language foundation] Solve C language error: expected ';', ',' or ')' before '&' token
Maximum area of solar panel od js
Coldfusion file read holes (CVE - 2010-2861)
Installation of mysql5.7.37 under CentOS7 [perfect solution]
【C语言】进制转换一般方法
Draw Your Cards
分布式与集群是什么 ? 区别是什么?
冒泡排序、选择排序、直接插入排序、二分法查找
The use of font compression artifact font-spider
Unity3D Button 鼠标悬浮进入与鼠标悬浮退出按钮事件
Modbus on AT32 MCU
全流程调度——MySQL与Sqoop
11、Redis实现关注、取消关注以及关注和粉丝列表
How to build a private yum source