mysql 数据库的 binlog 与 redo log 有什么区别,是如何配合保证数据安全?

首先,大的概念如下
binlog 是 mysql server 层的日志
redo log 是 innodb 引擎层的日志

另外,如下为具体的不同之处
第一 记录内容不同
binlog 是逻辑日志,记录所有数据的改变信息,不仅只有 innodb 表相关的数据。
redo log 是物理日志,记录所有inodb 表数据的变化。

第二 记录内容的时间不同
binlog 记录 commit 完毕之后的 dml、ddl 语句。
redo log 记录事务发起之后的dml、ddl语句。

第三 文件使用方式不同
binlog 不是循环使用,在写满或者实例重启后,会生成新的binlog文件
redo log 是循环使用,最后一个文件写满后,会重新写第一个文件

第四 作用不同
binlog 可用于数据恢复,搭建主从复制
redo log 用于异常宕机的恢复使用

那么如何保证 mysql 的 binlog、redo log 数据的一致性?

主要靠两阶段提交来保证。

prepare 阶段

事务sql语句先写入 redo log buffer,然后做一个事务准备标记,再将 log buffer 中的数据刷新到 redo log。

commit 阶段

再将事务产生的binlog写入文件,输入磁盘。

再在 redo log 中做一个事务提交的标记,并把 binlog 写入成功的标记也一并写入 redo log 文件。

你可能感兴趣的:(#,mysql,mysql,binlog,redo,log,prepare,commit)