undo log
是
InnoDB
存储引擎独有的想要保证事务的原子性,就需要在异常发生时,对已经执行的操作进行回滚,在 MySQL 中,恢复机制是通过 回滚日志(undo log) 实现的。
Mvcc 多版本的记录在undo log中
redo log
是
InnoDB
存储引擎独有的物理日志,记录内容是“在某个数据页上做了什么修改”redo log
(重做日志),它让MySQL
拥有了崩溃恢复能力。配合checkpoint循环使用
binlog
binlog
是逻辑日志,记录内容是语句的原始逻辑,类似于“给 ID=2 这一行的 c 字段加 1”,属于MySQL Server
层。- 二进制目志 (binary log)记录了对MySQL数据库执行更改的所有操作,但是不包 括SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改。
binlog
日志有三种格式,可以通过binlog_format
参数指定。
- statement
- row
- mixed
用途:
恢复 (recovery):某些数据的恢复需要二进制日志,例如,在一个数据库全备文 件恢复后,用户可以通过二进制日志进行point-in-time的恢复
复制 (replication):其原理与恢复类似,通过复制和执行二进制日志使一台远程 的MySQL数据库 (一般称为slave或standby) 与一台MySQL数据库(一般称 /master或primary) 进行实时同步
审计 (audit): 用户可以通过二进制日志中的信息来进行审计,判断是否有对数 据库进行注入的攻击
relay log
中继日志,基于binlog的主从同步
*工作原理*
**
1、主节点必须启用二进制日志,记录任何修改了数据库数据的事件。 2、从节点开启一个线程(I/O Thread)把自己扮演成 mysql 的客户端,通过 mysql 协议,请求主节点的二进制日志文件中的事件 3、主节点启动一个线程(dump Thread),检查自己二进制日志中的事件,跟对方请求的位置对比,如果不带请求位置参数,则主节点就会从第一个日志文件中的第一个事件一个一个发送给从节点。 4、从节点接收到主节点发送过来的数据把它放置到中继日志(Relay log)文件中。并记录该次请求到主节点的具体哪一个二进制日志文件内部的哪一个位置(主节点中的二进制文件会有多个,在后面详细讲解)。 5、从节点启动另外一个线程(sql Thread ),把 Relay log 中的事件读取出来,并在本地再执行一次