Mysql中的undo log和redo log, bin log的介绍

undo log的作用

undo log是Mysql实现"原子性"的重要方法. 在事务开启时, Mysql就会将该事务执行的命令记录到undo log中, 如果在提交事务前, 就发生了服务器崩溃, 执行 "回滚" 操作时就会读取undo log中记录的这些操作,并执行与其相反的操作达到恢复数据的目的.

例如: 在执行" delete * from students where id='1'; " 此时会将原来的值先记录下来,回滚时再将数据进行插入回去即可.

对于insert, update等等操作都类似于"执行相反的操作达到回滚的目的"

redo log的作用

redo log是Mysql进行持久化的重要操作. Mysql每进行数据的更新,删除等操作时就会将执行后的数据存放到redo log中, 如果数据库发生崩溃,就可以立即读取redo log中的数据进行恢复, 恢复后就是崩溃前的最新数据.

redo log采用了WAL(Write Ahead Logging)的机制, 即: 在写入硬盘前,先写入日志当中. 再由一个后台线程进行写入硬盘

bin log的作用

它是在Mysql的Server层日志,记录所有数据变更逻辑操作,用于主从复制和数据恢复。

Mysql的主从复制

  1. 当主库接收到客户端的请求时, 就会开启事务处理这些请求, 并在提交事务前将数据先写入到bin log中.

  2. 主库bin log写好后, 会从一个专门的"log dump"线程将bin log传给所有的从库.

  3. 此时每个从库也都有自己一个专属的I/O线程用来接收主库的bin log. 并将接收到的bin log存入到relay log中

  4. 从库接收到bin log之后就会利用自己一个专门的SQL线程用来读取relay log中的日志数据并同步到自己的数据库中.

主从复制策略

同步复制:

主库将bin log发给所有从库中, 必须要等待所有的从库同步完后,返回响应才能完成复制. 这种策略一旦从库多了,会消耗大量系统资源, 导致系统卡顿.

异步复制:

主库将bin log发给从库后, 无需等待复制完成,可以进行其他操作.

半同步复制:

主库将bin log发给从库后, 需要等待一部分的从库返回复制完成的响应.

当有一个主库和两个从库时,只需要等待一个从库返回复制完成的响应即可

相关推荐
2603_9547083112 分钟前
全维度容错设计,打造微电网安全运行屏障
服务器·网络·数据库·人工智能·分布式·安全
IvorySQL38 分钟前
从双解析器到循环工程:IvorySQL 五年技术演进路线的深度观察
大数据·数据库·人工智能·postgresql·开源
wefg11 小时前
【MySQL】事务
数据库·mysql
黑白极客1 小时前
mysql的高可用性
数据库·mysql
一十九的酒1 小时前
Oracle 12c 标准版无缝升级企业版实战记录
数据库·oracle·标准版切换到企业版
ZhengEnCi1 小时前
S02-SpringBoot实体类新增字段对已有数据的影响及自动DDL同步机制详解
数据库·spring boot
妙码生花2 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(三十二):增加 admin_rule 模型及数据表迁移
数据库·go·ai编程
千维百策6663 小时前
SRE 中如何消除琐务:提升工程效率与服务可靠性的实践方法
数据库
卓怡学长3 小时前
w266基于spring boot + vue 圣地延安美食乐享系统
java·数据库·vue.js·spring boot·spring·intellij-idea
名不经传的养虾人3 小时前
从0到1:企业级AI项目迭代日记 Vol.65|最危险的故障不是崩溃,是悄悄换掉了正确答案
数据库·人工智能·ai编程·ai-agent·企业ai