【参考文章】:MySQL中Redo与Binlog顺序一致性问题?
【参考文章】:极客时间
二进制日志是server层的,主要用来做主从复制和即时点恢复时使用的。
基于SQL语句的复制(statement-based replication,SBR):记录执行的SQL语句
基于行的复制(row-based replication,RBR):记录更新的每一条记录的变化情况
混合模式复制(mixed-based replication,MBR):根据具体的更新语句选择上述两种中的一种方式记录
静态设置,配置文件形式
vi my.cnf
binlog_format="STATEMENT"
动态设置,命令形式
mysql> SET GLOBAL binlog_format = ‘STATEMENT‘;
事务日志(redo log)是InnoDB存储引擎层的,用来保证事务安全的。
redo log 是固定大小的,从头开始写,写到末尾又回到开头循环写;
redo log 有两个指针:
一个为 write pos:表示当前记录的位置,一边写一边后移;
一个为 checkpoint:表示当前要擦除的位置,一边擦除一边后移,擦除之前要将记录写到磁盘文件中;
binlog 属于MySQL的 sever 层,所有引擎都可以使用;redo log 属于 InnoDB引擎特有。
binlog 是逻辑日志,记录的是SQL语句的原始逻辑;redo log 是物理日志,记录的是在某个数据页上做了什么修改。
binlog 是追加写,一个文件写满之后就写到下一个文件,不会覆盖之前的文件;redo log 是循环写,写到文件末尾之后又从文件起始位置开始写,会覆盖之前的日志。
原文:https://www.cnblogs.com/virgosnail/p/10398325.html