社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

MySQL的日志模块

慧鑫coming • 5 年前 • 163 次点击  

日志模块redo log

  • redo log为InnoDB引擎特有,当有一条更新记录时,InnodDB会把它先写到redo log,并更新内存,此时更新操作就算完成了。InnoDB会在适当的时候把这个操作记录更新到磁盘,往往是系统比较空闲的时候。WAL技术(Write-Ahead Logging),就是基于redo log实现的。
  • redo log是固定大小的,并且是循环写,比如有4个redo log文件,1234顺序写,那么在都写满的情况下,会先将1号文件记录更新到磁盘,然后将1号文件清空,继续记录新的redo log。
  • redo log保证数据库发生异常重启后,之前提交的记录都不会丢失,这个能力成为crash-safe

日志模块binlog

  • binlog是Server层的日志。
  • 只依靠binlog是没有crash-cash能力的。

bin log和redo log区别

  • redo log是InnoDB引擎所特有, 而bin log是Server层的日志,所有引擎都可以使用。
  • redo log是物理日志,记录的是“在某个数据页上做了什么修改”;binlog是逻辑日志,记录语句的原始逻辑,如“给ID=1这一行的a字段赋新值10”。
  • redo log是循环写,空间固定会用完,需清除之前的日志;binlog是追加写,一个日志文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/29132
 
163 次点击