1、日志类型sql
|
STATMENT
|
ROW
|
说明
|
基于SQL语句的复制(statement-based replication, SBR),每一条会修改数据的sql语句会记录到binlog中。
是bin log的默认格式。
|
基于行的复制(row-based replication, RBR):不记录每一条SQL语句的上下文信息,仅保存哪条记录被修改。
|
优势
|
不须要记录每一条SQL语句与每行的数据变化,减小了bin log的日志量,节约了磁盘IO,提升性能。
|
会很是清楚的记录下每一行数据修改的细节,不会出现某些特定状况下的存储过程、或function、或trigger的调用和触发没法被正确复制的问题。
|
缺点
|
在某些状况下会致使master-slave中的数据不一致,如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题。
|
会产生大量的日志,尤为是alter table的时候会让日志暴涨。
|
|
redo log
|
binlog
|
文件大小
|
redo log 的大小是固定的。
|
binlog 可经过配置参数max_binlog_size 设置每一个 binlog 文件的大小。
|
实现方式
|
redo log 是 InnoDB 引擎层实现的,并非全部引擎都有。
|
binlog是 Server 层实现的,全部引擎均可以使用 binlog 日志。
|
记录方式
|
redo log 采用循环写的方式记录,当写到结尾时,会回到开头循环写日志。日志上的记录修改落盘后,日志会被覆盖掉,没法用于数据回滚/数据恢复等操做。
|
binlog 经过追加的方式记录,当文件大小大于给定值后,日志会发生滚动,以后的日志记录到新的文件上,不会覆盖之前的记录。
|