日志文件
binlog
binlog主要记录了MySQL数据库执行了更改的所有操作,主要用来做主从复制,数据恢复
记录模式:
- Statement模式:每一条回修改数据的sql都会被记录在日志中
- Row模式:每一行具体变更是俺都会被记录在binlog中
- 混合模式
刷盘时机选择 - 0:由系统自行判断何时刷盘
- 1:每次提交事务的时候将binlog刷盘
- N:每N个事务将binlog写入磁盘
什么情况下会重新生成binlog
- 服务器停止或重启
- 使用flaush logs命令后
- binlog文件大小超过max_binlog_size变量的阈值后
redolog
保证事务的持久性
刷盘策略
- 0:每隔一秒把redo log buffer刷到磁盘文件系统中去,1s前的日志都存在缓冲区,如果此时服务器宕机,将可能丢失1s的数据 延迟写,效率最高,最不安全
- 1:每次提交事务的时候,会把redolog buffer刷到磁盘文件中去,并立即调用文件系统的flush操作将缓存刷新到磁盘 实写实刷,效率最低,最安全
- 2:每次提交事务的时候,会把redolog buffer刷到磁盘文件中去但不会立即刷写到磁盘 实时写,延迟刷,效率,安全都折中
undolog
撤销日志
binlog和redolog的区别
- binlog主要用作数据库还原,属于数据级别的数据恢复,redolog主要用于保证事务的持久性,属于事务级别的数据恢复
- redolog是InnoDB引擎特有的,binlog属于存储引擎共有的
- redolog属于物理日志,抓哟记录某个页的修改,binlog属于逻辑日志,主要记录数据库执行的所有DDL和DML语句
- binloog使用追加的方式写入,大小无限制,redolog采用循环的方式进行写入,大小固定,写到结尾时,回到开头继续写