【编程底层原理】mysql的redo log undo log bin log日志的作用,以及何时生成,涉及到哪些参数变量
MySQL中的redo log、undo log和bin log是三种重要的日志,它们在数据库事务处理、数据持久性和复制等场景中发挥着关键作用。
1. Redo Log(重做日志)
-
- 作用:Redo log用来保证事务的持久性。当数据库发生故障时,可以使用redo log来恢复数据到最后一次提交的状态。它记录了数据页的物理修改,即事务对数据页所做的更改。
-
- 何时生成:在事务执行过程中,每当有数据页被修改时,对应的redo log就会被生成,并存储在内存中的redo log buffer里。
-
- 参数变量: -
innodb_log_buffer_size
:控制redo log buffer的大小。 -innodb_flush_log_at_trx_commit
:控制事务提交时redo log的刷盘行为,可以设置为0、1或2。 -innodb_log_file_size
:定义单个redo log文件的大小
- 参数变量: -
2. Undo Log(回滚日志)
-
- 作用:Undo log用于事务的原子性和MVCC(多版本并发控制)。如果事务需要回滚或数据库崩溃,undo log可以用于恢复原始数据。同时,它支持在读取操作中提供数据的旧版本,使得在高并发环境下,不同的事务可以看到数据的不同版本。
-
- 何时生成:在事务开始时创建,事务的每个修改操作都会生成undo log。
-
- 参数变量: - 没有特定的参数直接控制undo log的大小,但它受
innodb_buffer_pool_size
的影响,因为undo log存储在buffer pool中。
- 参数变量: - 没有特定的参数直接控制undo log的大小,但它受
3. Binlog(二进制日志)
-
- 作用:Binlog是MySQL服务器层的日志,用于记录所有数据库表结构变更和数据修改的日志(不包括SELECT和SHOW这类操作)。它主要用于数据的复制和恢复。
-
- 何时生成:在事务提交时生成,记录了该事务期间所有修改数据的操作。
-
- 参数变量: -
expire_logs_days
:设置binlog文件的过期天数。 -max_binlog_size
:定义单个binlog文件的最大大小。 -sync_binlog
:控制每次事务写入binlog后是否进行fsync同步到磁盘。
- 参数变量: -
4.总结
这些日志共同工作,确保了MySQL数据库的稳定性和数据的一致性。Redo log和undo log是InnoDB存储引擎特有的日志,而binlog则是MySQL服务器层的日志,它们之间的区别主要在于作用、生成时机和适用对象。