Mysql存储引擎、日志、二阶段提交

存储引擎

InnoDB引擎:

  • 所有表存放在一个数据文件中
  • 对内存需求大,在主存中会建立专用的缓冲池
  • 使用聚簇索引,数据和索引集中存储,在非主键索引的叶子结点中存放主键,需要进行回表
  • 支持外键和事务
  • 对于数据的增删改性能更优
  • 支持行级锁、表级锁,锁定力度小并发能力高

MylSAM引擎:

  • 每张表被放在三个文件中:frm表格定义、MYD数据文件、MYI索引文件
  • MylSAM可以被压缩,存储空间小
  • 使用非聚簇索引,在叶子结点中存储数据地址,需要再次寻址才能得到数据
  • 不支持外键和事务
  • 只支持表级锁,锁颗粒度较大
  • 在数据查询上效率更高

Memory引擎:所有的数据都存储在内存中,数据处理效率高但是不安全


日志

存储引擎级别日志

重做日志(redo log):物理日志,用于保持事务的持久性,每当操作时,在磁盘数据变更之前,将操作写入redo log,这样当系统奔溃重启后可以继续执行。redo log 转移到磁盘中的过程是顺序读写,把原本的随机读取转变为顺序读写可以提高效率,相当于一个位于磁盘的数据缓冲区,记录下数据的改变。


回滚日志(undo log):用于保持事务的原子性和一致性,InnoDB引擎在事务回滚时通过undo log实现,在进行DML操作时,会记录一条操作语句的快照,每条快照有一个指针指向上一条快照,这样一来undo log会形成一个链表,链首是最新的记录,链尾是最旧的记录,这个链不回无限增长,有个purge线程,定期删除无用的undolog数据。

事务回滚的实现方式:mysql会默认在表中加入 roll_back回滚指针,当对字段值进行操作时后,回滚指针指向上一条操作语句。undo日志对每一条操作语句形成快照,需要回滚时,根据回滚指针找到上一条操作语句,重新执行完成回滚。


 Mysql Server层次日志

二进制日志(bin log):主要用在主从复制,数据库的表结构变更、表数据修改都会更以二进制存储在磁盘上,每一条记录称作事件,binlog 的主要目的是复制和恢复。通过binlog就可以将一个MySQL数据库服务器(master) 的数据复制到一个或多个其他MySQL数据库服务器

图片来源: http://t.csdn.cn/SyaCF

错误日志(error log):错误日志包含 mysqld 启动和关闭的时间信息,诊断消息,服务器在运行过程中发生的故障和异常情况等。

慢查询日志(slow query log):记录在 MySQL 中响应时间超过阀值的语句,阈值由参数long_query_time决定, 默认值为 10,单位是s

中继日志(relay log):,一般情况下用在MySQL主从复制的从节点,用于存储主节点bin log同步过来的日志内容,从节点从relay log 中读取数据部署到从节点数据库中,起到了中介作用。


二阶段提交

多用于主从复制中,在进行完DML操作后,记录一条 redolog + 标志位 prepare ,然后再binlog中记录一条事件,再回到 redolog中 记录一条日志 标志位为 commit,表示已经提交。实际 redolog 和 binlog 是同步操作 保持一致

如果在 prepare 到 binlog 过程出现问题,恢复数据时首先检查redolog状态是不是commit 是 提交数据 ,不是 ,根据事务编号查看binlog中是否有匹配的记录,没有 该记录作废

如果在binlog 到 commit 出现问题,数据恢复时,查看是否是commit状态,不是 查看binlog中是否有匹配事件,有 将redolog中的prepare状态改为commit。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值