赞
踩
一、Mysql单例数据库架构
1、Mysql体系介绍
2、SQL运行过程
3、InnoDB内存和存储结构
优势:擅长处理事务,具有自动崩溃恢复的特性
内存结构:内存结构主要包括Buffer pool、Change Buffer、Adaptive Hash Index和Log Buffer四大组件
* 内存Page:Free Page、Clean Page(真正的缓存)、Dirty Page
* 链表管理:Free List、Flush List、LRU List
存储结构:InnoDB磁盘主要包含Tablespaces、InnoDB Data Dictionary、Doublewrite Buffer、Redo Log和Undo Logs
(1)Buffer pool
(2)Change Buffer
是一个提高INSERT、DELETE、UPDATE等写时效率的写缓存。应用在非唯一普通索引页(唯一索引必须进行唯一性检查,需要读取磁盘)、不在缓冲池中(在缓存池中则直接修改缓存池中的页)、对页进行了写操作,并不会立刻将磁盘页加载到缓冲池,而仅仅记录缓冲变更(Buffer Change),等未来数据被读取时,再将数据合并恢复到缓冲池的技术。写缓冲的目的是降低写操作的磁盘IO,提升数据库性能。
(3)Binlog
用于记录数据库执行的写入性操作(不包括查询)信息,以二进制的形式保存在磁盘中,由Server层进行记录。使用场景分别是主从复制和数据恢复。日志格式包含三种
STATMENT:基于sql语句的复制,每一条会修改数据的sql语句会记录到binlog中(缺点:更新时使用sysdate)
ROW:基于行的复制,记录哪条数据被修改的信息
MIXED:基于STATMENT和ROW两种模式的混合复制
(4)Redo log
用于解决数据库事务提交还未刷入磁盘,服务器down机导致的数据丢失问题。记录事务对数据页做了哪些修改,不去直接刷新磁盘。包括两个部分,一个是内存中的日志缓冲(redo log buffer),另一个是磁盘上的日志文件(redo log file)。mysql每执行一条DML语句,先将记录写入redo log buffer,后续某个时间点再一次性将多个操作记录写到redo log file。这种先写日志,再写磁盘的技术就是WAL(Write-Ahead Logging)技术。
因为redo log是InnoDB特有的,且日志上的记录落盘后会被覆盖掉。因此需要binlog和redo log二者同时记录,才能保证当数据库发生宕机重启时,数据不会丢失。
(5)Undo log
实现MVCC和事务回滚,undo日志版本链是指一行数据被多个事务依次修改过后,在每个事务修改完后,Mysql会保留修改前的数据undo回滚日志,并且用两个隐藏字段trx_id和roll_pointer把这些undo日志串联起来形成一个历史记录版本链。
(6)Free List(空闲链表)
为了标记哪些页是空闲页,将空闲缓存页的控制块作为链表的节点,串起来形式Free链表。当需要从磁盘中加载一个页到Buffer Pool中时,就从Free链表中取出一个空闲的缓存页,并且把该缓存页对应的控制块的信息填上,然后把该缓存页对应的控制块从Free链表中移除
(7)Flush List
更新数据时,不需要每次写入磁盘,而是将Buffer Pool对应的缓存页标记为脏页,然后再由后台线程将脏页写入到磁盘。为了知道哪些缓存页是脏的,于是有了Flush链表,与Free链表类似,区别在于Flush链表的元素都是脏页.
InnoDB更新操作采用的是Write Ahead Log策略,即先写日志,再写入磁盘,通过redo log日志让MySQL拥有了崩溃恢复能力。
(8)LRU List
4、TableSpace
Segment:数据段、索引段、回滚段
Extent:一个段包含多个区、一个区包含64个页
Page:一个页包含多条记录
Row:用户写入的实际数据
5、Page
6、InnoDB线程模型
7、备份机制
二、Mysql数据复制
1、Mysql数据复制原理
2、Mysql复制架构
3、Mysql复制模式
三、Mysql高可用及进阶
1、Mysql高可用原理
2、Keepalived架构
3、MHA架构
4、MGR架构
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。