mysql有多少种日志
error log
慢查询log:记录超过long_query_time的sql,默认不开,会影响性能。
redo log
undo log
bin log
general log:记录了客户端连接信息以及执行的sql语句信息。
binlog:
记录增删改的sql,用于恢复、主从同步
redolog
数据修改之后的值,基于磁盘的数据结构,用来将mysql宕机时将不完整的事务进行数据纠正,redo log记录事务执行的状态。
undolog
数据修改之前的值,事务失败后的回滚、MVCC访问老版本的数据
binlog刷盘机制
由sync_binlog控制。
1、当sync_binlog=0时,每次提交会先写入page cache,在mysql崩溃时会有丢失日志的风险。
2、sync_binlog=1时,每次提交事务都会写入磁盘。强一致性。
3、sync_binlog>1时,每次提交会先写到page cache,当提交了n个事务时,才会写入磁盘。
redolog刷盘机制
innodb_flush_log_at_trx_commit
1、当等于0时,每秒触发一次缓存日志写入磁盘的操作。
2、当等于1时,有事务提交就立刻刷盘
3、当与等2时,每次事务提交就交给操作系统,每次都把redo log写到系统的page cache中,由操作系统接管什么时候写入磁盘。
时机顺序:
1、开启事务
2、查询数据库中需要更新的字段,加载到内存中形成数据脏页。
3、记录undo log到内存缓冲区,并关联redo log
4、记录redo log 到内存缓冲区,准备提交事务
5、修改内存中的脏页数据
6、提交事务触发redolog 刷盘
7、undo log和脏页刷盘
8、事务成功