mysql日志模块
redo log
在MySQL中如果每次更新操作后都写要磁盘,即首先在磁盘中找到该条记录,再更新,整个过程I/O成本,查找成本都很高并发度很高的情况下对效率影响较大。为了解决该问题,MySQL中使用到了WAL(Write-Ahead logging )写磁盘前先写日志。当一条记录需要更新的时候,InnoDB会先把记录写入redo log,等系统空闲时再写入磁盘。
此外InnoDB的redo log大小是固定的,为了节省空间期间,其从头开始写,写到末尾后又从开头循环。如下图所示:
定义两个指针,每次往write pos之后记录操作,一边记录,一边后移write pos指针,在该过程中需要保证write pos到check point有空闲位置,若无空闲位置,先擦掉然后移动check point,擦除之前需先写入磁盘。此外若写满了,此时就不能执行更新操作了,之后擦除得到空闲位置才能接着执行。
redo log保证了即使数据库发生异常重启,之前提交的数据也不会丢失,该能力被称之为cash - safe。
redo log也是事务持久性的具体实现。
binlog
bin log为mysql server层固有的日志,用于归档。
其与redo log有以下三点不同:
1)、redo log 是InnoDB独有的,二binlog是MySQL Server层实现的,所有的引擎都可以使用。
2)、redo log是物理日志,记录的是每个数据页做了哪些修改,binlog是逻辑日志,记录的是这条语句的原始逻辑,比如修改某行的某个字段。
3)、redo log是循环写,其空间是会用完的,而binlog是追加写入的,写满一定大小之后会换到另一块。
两阶段提交
一条更新语句
把更新写入内存
写入redo log, 事务处于prepared阶段
写入binlog
提交事务, 事务处于commit
使用两阶段提交是为了保证两个日志的逻辑一致。为了防止redo log刚写完,还未写binlog此时发生crash了。
对于数据库要恢复到某一时间:
1)、找到redo log建立的最近的一次全量备份,从该备份恢复到零时库
2)、然后从备份时间开始,将备份从binlog取出依次恢复到那个时间
此时就可以把临时库按需分配到线上。
- 纳税服务系统五(登陆与系统拦截)【配置系统、子系统首页、登陆与拦截】
- 纳税服务系统六(信息发布管理模块)【Ueditor、异步信息交互、抽取BaseService、条件查询、分页】
- 纳税服务系统七(投诉管理模块)【显示投诉信息、处理回复、我要投诉、Quartz自动受理、统计图FusionCharts】
- Unikernel初体验
- Scala学习教程笔记三之函数式编程、集合操作、模式匹配、类型参数、隐式转换、Actor、
- Scala学习教程笔记二之函数式编程、Object对象、伴生对象、继承、Trait、
- Scala学习教程笔记一之基础语法,条件控制,循环控制,函数,数组,集合
- Kafka的生产者和消费者代码解析
- Caused by: java.lang.ClassNotFoundException: backtype.storm.topology.IRichSpout
- 作为完美主义者(强迫症)如何将linux的eth1网卡修改为eth0网卡
- 【入门篇】一个小白在Jetson TX2上安装caffe的踩坑之旅
- 【入门篇】Jetson TX2深度学习Inference初体验
- zeromq的安装,部署(号称最快的消息队列,消息中间件)
- OpenDaylight新建HelloWorld工程并集成版本
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解