Binlog
主要作用:
- 主从复制,Master端开启binlog,再将二进制日志传递给slaves回放,来达到数据一致性的目的;
- 数据恢复;
- 增量备份;
格式:
binlog 日志有 Row、Statement、Mixed 三种格式。可以通过 my.cnf 配置文件及 set global binlog_format='ROW/STATEMENT/MIXED'进行修改
Row格式
Row 格式仅保存记录被修改细节,不记录 sql 语句上下文相关信息。新版本的 MySQL 默认是 Row 格式。
缺点:全表更新或者alter语句会修改每一行,会使日志变的十分庞大;
Statement格式
每一条会修改数据的 sql 都会记录在 binlog 中。
缺点:因为上下文和部分函数的问题,有可能导致主从不一致的情况;
Mixed格式
根据sql语句对于全表row的记录进行优化,其实,新版本的mysql对row格式已经做了优化,默认使用row就可以了;
Redo log
日志先行(WAL):redo log是顺序整块写入的,性能更好。
Checkpoint:更新策略的检查点,将redo log中的内容刷新到磁盘里;
LSN:版本标记计数,对比数据页中的LSN和redo log中的LSN来判断是否需要刷到磁盘里;
一次事务更新过程:
- 开启事务;
- 查询待更新的记录到内存中,并加X锁;
- 记录undo log到内存buffer中;
- 记录redo log到内存buffer中;
- 更新内存中的数据;
- 提交事务,触发undo log、redo log刷盘;
- 记录bin log日志;
- 事务结束,释放锁;