MySQL三大日志:
二进制日志 binlog(归档日志) |
事务日志 redo log(重做日志) |
undo log(回滚日志)。 |
binlog的写入时机也非常简单,事务执行过程中,先把日志写到binlog cache,事务提交的时候,再把binlog cache写到binlog文件中。 |
redo log(重做日志)是InnoDB存储引擎独有的,它让MySQL拥有了崩溃恢复能力。 |
|
binlog 是逻辑日志,记录内容是语句的原始逻辑,类似于“给 ID=2 这一行的 c 字段加 1”,属于MySQL Server 层。 |
redo log 它是物理日志,记录内容是“在某个数据页上做了什么修改”,属于 InnoDB 存储引擎。 |
|
可以说MySQL数据库的数据备份、主备、主主、主从都离不开binlog,需要依靠binlog来同步数据,保证数据一致性。 |
MySQL InnoDB 引擎使用 redo log(重做日志) 保证事务的持久性;redo log(重做日志)让InnoDB存储引擎拥有了崩溃恢复能力。 |
使用 undo log(回滚日志) 来保证事务的原子性。 |
因为一个事务的binlog不能被拆开,无论这个事务多大,也要确保一次性写入,所以系统会给每个线程分配一个块内存作为binlog cache。 |
||
binlog是可以追加写⼊的。“追加写”是指binlog⽂件写到⼀定大小后会切换到下⼀个,并不会覆盖以前的日志; |
redo log是循环写的,空间固定会用完; |
redo log和bin log的区别:
二进制日志 binlog(归档日志) |
事务日志 redo log(重做日志) |
|
是否特有 |
redo log是InnoDB引擎特有的; |
binlog是MySQL的Server层实现的,所有引擎都可以使⽤; |
日志特性 |
redo log是物理日志,记录的是“在某个数据页上做了什么修改”; |
binlog是逻辑日志,记录的是这个语句的原始逻辑,比如 “给ID=2这⼀行的c字段加1”; |
写入方式 |
redo log是循环写的,空间固定会用完; |
binlog是可以追加写⼊的。“追加写”是指binlog⽂件写到⼀定大小后会切换到下⼀个,并不会覆盖以前的日志; |
使用方式 |
binlog可以作为恢复数据使用,主从复制搭建; |
redo log作为异常宕机或者介质故障后的数据恢复使用; |
对ACID的贡献 |
binlog用于保证数据的一致性; |
redo log用于保证持久性; |