InnoDB存储引擎redo log文件——《MySQL技术内幕InnoDB存储引擎》读书笔记
2016-01-04 15:20
537 查看
redo log的作用是记录事务日志。万一实例或介质失败,可以通过redo log进行恢复,保证数据的完整性。
每个InnoDB存储引擎至少有1个redo log文件组,每个文件组下至少有2个redo log文件。为了得到更高的可靠性,可以设置多个mirrored log group,将不同的文件组放在不同的磁盘上。日志组中每个redo log文件的大小一致,并以循环方式使用。InnoDB存储引擎先写redo log文件1,当达到文件的最后是,会切换至文件2,当文件2也被写满时,会再切换到文件1中。
参数innodb_log_file_size指定了redo log文件的大小;innodb_log_files_in_group指定了redo log文件组中redo log文件的数量,默认为2;innodb_mirrored_log_groups指定了日志镜像文件组的数量,默认为1,代表只有一个文件组,没有镜像;innodb_log_group_home_dir指定了日志文件组所在路径,默认在数据库路径下。
redo log文件的大小不能设置得太大,如果设置得太大,在恢复时可能需要很多的时间,另一方面又不能太小,否则可能导致一个事务的日志需要多次切换redo log文件。
InnoDB存储引擎的redo log文件记录关于每个page的更改的物理情况。在事务进行的过程中,不断有redo entry被写入redo log文件中。
redo log结构
对于写入redo log文件的操作不是直接写,而是先写入一个redo log buffer中,然后按照一定的条件写入日志文件。
主线程每秒会将redo log buffer写入磁盘的redo log文件中,无论事务是否已经提交。另一个触发写入过程是由innodb_flush_log_at_trx_commit控制,表示在commit操作时,处理redo log的方式。
参数innodb_flush_log_at_trx_commit可设置的值有0、1、2。0代表当前事务提交时,并不将事务的redo log写入磁盘上的日志文件,而是等待主线程每秒的刷新。而1和2不同的地方在于:1是在commit时将重做日志缓冲同步写到磁盘;2是重做日志异步写到磁盘,不能保证commit时肯定会写入redo log文件。
每个InnoDB存储引擎至少有1个redo log文件组,每个文件组下至少有2个redo log文件。为了得到更高的可靠性,可以设置多个mirrored log group,将不同的文件组放在不同的磁盘上。日志组中每个redo log文件的大小一致,并以循环方式使用。InnoDB存储引擎先写redo log文件1,当达到文件的最后是,会切换至文件2,当文件2也被写满时,会再切换到文件1中。
参数innodb_log_file_size指定了redo log文件的大小;innodb_log_files_in_group指定了redo log文件组中redo log文件的数量,默认为2;innodb_mirrored_log_groups指定了日志镜像文件组的数量,默认为1,代表只有一个文件组,没有镜像;innodb_log_group_home_dir指定了日志文件组所在路径,默认在数据库路径下。
redo log文件的大小不能设置得太大,如果设置得太大,在恢复时可能需要很多的时间,另一方面又不能太小,否则可能导致一个事务的日志需要多次切换redo log文件。
InnoDB存储引擎的redo log文件记录关于每个page的更改的物理情况。在事务进行的过程中,不断有redo entry被写入redo log文件中。
redo log结构
Space id | PageNo | OpCode | Data |
主线程每秒会将redo log buffer写入磁盘的redo log文件中,无论事务是否已经提交。另一个触发写入过程是由innodb_flush_log_at_trx_commit控制,表示在commit操作时,处理redo log的方式。
参数innodb_flush_log_at_trx_commit可设置的值有0、1、2。0代表当前事务提交时,并不将事务的redo log写入磁盘上的日志文件,而是等待主线程每秒的刷新。而1和2不同的地方在于:1是在commit时将重做日志缓冲同步写到磁盘;2是重做日志异步写到磁盘,不能保证commit时肯定会写入redo log文件。
相关文章推荐
- [MySQL] 重启MySQL提示ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql)
- MySQL max_allowed_packet设置及问题
- MySQL SELECT同时UPDATE同一张表 You can't specify target table 'sys_user' for update in FROM clause
- MySQL触发器更新本表数据异常:Can’t update table ‘tbl’ in stored function/trigger because it is already used by s
- 浅谈MySQL主键
- MYSQL获取自增ID的四种方法
- MySQL 序列使用AUTO_INCREMENT
- 解决win8及8.1安装mysql等msi类型文件2503,2502的问题
- mysql在dos界面修改密码
- concat() mysql 多个字段拼接
- 关于DOS界面net start MySQL 启动失败的解决办法
- MySql安装种种
- Mysql 里CHAR和VARCHAR的最大长度及一些注意事项
- 解决mysql max_allowed_packet 太小 造成的程序查询数据报错问题
- mysql中char(n)和varchar(n)在数据存入的时候关于是否丢弃最后的空格的区别
- mysql自带的字符串相关函数
- MySQL 5.7 zip安装
- 批量修改MySQL列级别字符排序方式为utf8
- mysql排序
- Mysql进程管理