--------------------------------------------------2015-02-10--------------------------------------------------

(为了节约写作时间,本文部分简称'重做日志'为'日志')

默认情况下, innodb存储引擎的数据目录下有两个文件,ib_logfile0和ib_logfile1. 这就是innodb存储引擎的日志文件了.也叫重做日志文件. 它们记录了innodb存储引擎的事务日志.

该日志文件用于保证innodb的数据完整性.

一.重做日志文件结构:

每一个innodb存储引擎至少有一组日志文件, 每组日志文件至少由2个文件组成.就像上面的所说的,ib_logfile0和ib_logfile1. innodb以循环写入的方式写入日志,例如先写ib_logfile0,当ib_logfile0被写满时,将接下来的内容写入ib_logfile1,当ib_logfile1被写满时又回到ib_0. 所以这两个(或n+1个)日志文件理论上说大小应该是保持一致的.  另外可同过参数innodb_mirrored_log_group参数(设置日志镜像)和innodb_log_group_home参数(设置日志文件组所在路径, './'为数据库数据目录下), 若将日志存放与不同的磁盘上,可提高innodb整体性能.

二. 重做日志与mysql二进制日志的区别:

1. 二进制日志会记录所有与mysql数据库有关的日志记录,包括,innodb,myisam, 等其他存储引擎的日志.     重做日志只记录innodb本身的事务日志.

2. 记录内容. 二进制日志记录的是一个事务的具体操作内容 . 重做日志记录的是关于每个页的更改的物理情况.

3. 写入时间: 二进制日志在每次事务commit时写入 .重做日志在事务进行中(commit之前)同样进行写入操作. 重做日志的操作并不是直接日入文件,而是先写入一个重做日志缓存中,然后按照一定顺序写入文件.(重做日志的写入过程). 重做日志是按512字节也就是一个扇区的大小,因为扇区是写入(磁盘)的最小单位,因为日志的写入必定是成功的.因此在重做日志的写入过程中不需要有两次写入(double write)

三 .重做日志写入条件 :

 1. mysql 主线程(master thread)每秒/每10秒会将重做日志写入到文件,即使在事务中没有进行提交操作(commit).

2. innodb_flush_log_at_trx_commit 参数. 该参数有三个有效值. 分别为:

   0 : 即当事务提交时(sql执行时,非commit操作),不将日志写入日志文件, 而只能由主线程进行每秒/每10秒的刷新. (这个值网上多文章解释为不写入日志文件).

1: 当事务提交时 ,重做日志缓同步到日志文件, 即伴有fsync操作.

2: 标识将重做日志异步刷新到磁盘, 即提交事务时,将日志内容写入到操作系统缓存. 稍后(具体不清楚)将系统缓存写入到日志文件中. 如果在日志记录并未写入到文件中,mysql 意外关闭,但操作系统正常运行. 当下次mysql启动时, 系统缓存中的日志内容仍然可用.如果操作系统挂了, 重做日志就没办法恢复了.     注:一般为了提升innodb的写入性能,可将innodb_flush_log_at_trx_commit设置为2.

--------------------------------------------------2015-02-10--------------------------------------------------

最新文章

  1. SparkSQL读取Hive中的数据
  2. [moka同学笔记]Yii2.0显示页匿名函数设置$value
  3. Storm自带测试案例的运行
  4. OpenCV 3.0 CvMat and cv::Mat Conversion
  5. mysql学习笔记 第七天
  6. getResource().getPath()返回的路径空格变成了 %20
  7. The requested page cannot be accessed because the related configuration data for the page is invalid
  8. WebView无法放大缩小解决方式
  9. Everything(速度快的文件搜索软件) 1.4.1.801b 汉化绿色版
  10. 小梦windows phone 8.1开发:语音朗读
  11. Java异常类(Throwable)
  12. QT的安装及环境配置
  13. SpringMVC之数据传递一
  14. Java装箱的 " == " 的问题
  15. CentOS7编译安装mysql-5.6.43
  16. Javascript 异步处理与计时跳转
  17. JQuery实现密码有短暂的显示过程和实现 input hint效果
  18. PairRDD中算子foldByKey图解
  19. SOE 中调用第三方dll
  20. one-vs-all案例

热门文章

  1. Windows 10 路由表管理
  2. https://jwt.io/一个可以解析token的神奇网站
  3. 【tyvj1858】xlkxc(拉格朗日插值)
  4. Div转为Canvas简直不要太好玩~~~
  5. 字典与json转化
  6. 字符设备驱动程序之poll机制(韦大仙)
  7. aiohttp_spider
  8. Vue的模板语法(四)
  9. angular父子组件传值和ngOnChanges的使用
  10. 选择排序法(C语言)