redo log和binlog的纠缠

redo log

1redo log属于物理日志,redo log记录格式(数据文件、数据页、数据行、操作类型、操作值)

2redo log主要用来保护innodb buffer pool中的脏数据页,系统崩溃恢复需要用到redo log

3redo log用来进行崩溃恢复事务的前滚;实现快速提交;新版本8.0.17新增了redolog的归档功能,用于实现防止redo备份的速度跟不上生成的速度而导致的redolog被刷掉,保证redolog的不丢失。

4redo log在后台被频繁刷新,包括提交刷新、定期刷新、1/2满刷新;触发的机制(commit;每秒redo日志达到redo buffer的二分之一;redo大小达到1M

5log file会循环覆盖使用,对于没有写会的脏数据页对应的log file不能被覆盖

6redo log不能用来进行备份恢复

7redo log用来保护已提交事务,满足已提交事务持久化

8redo log只能保护innodb引擎对应的表

binlog

1binlog适合常用引擎,主要用来进行数据库备份恢复,不能用来进行崩溃恢复;

2binlog属于逻辑日志,逻辑日志以SQL的方式来记录数据变更;

3、提交时一次性写入,因此可能会产生binlog的临时磁盘文件

4binlog不会循环覆盖,我们可以定期手工删除,通过参数控制设置定期清空策略来可以实现自动删除,但是可能会导致IO性能问题,因此最好还是手工删除。

5binlog支持rowmixedstatement三种模式。

row模式保证了数据的一致性,但是产生了大量的binlog

statement模式会导致数据的不一致,因此不建议采用;

mixed模式解决了上面的两种问题,但是现在还是采用row模式的居多。

6binlog主要用来解决三个问题:1、数据恢复 2、主从架构 3、审计功能

7binlog适合常用引擎,可以用来进行备份恢复,不能用来进行崩溃恢复

8binlog在恢复的时候可以实现单表、单库恢复,因此恢复比较灵活

9binlog提交时写入binlog日志文件,因此需要binlog cache来缓存,缓存过小会导致binlog disk uasge,影响事务的提交速度。

10binlog参数binlog_rows_query_log_events用来记录SQL原始模式,便于SQL审计以及定位搜索;

11、会话级别临时关闭binlogsql_log_bin对于降低主从延迟非常有意义,大批量操作可以同时在主库和从库执行

12binlog提交时写入binlog日志文件,因此需要binlog cache来缓存,缓存过小会导致binlog disk uasge,影响事务的提交速度

13binlog可以使用mysqlbinlog进行查看具体内容,进行DMLDDL日志审计

原文地址:https://www.cnblogs.com/5945yang/p/11259175.html