mysql binlog和redolog

过程
起因:好奇mysqld的binlog...(在学习数据系统原理的时候只有说到事务的特性,但是并没有详细解释是怎么实现,至于数据库备份什么的也只是停留在应用阶段)
经过:拜读极客时间某一课程。然后再加上大Google,一遍搜一边理解,一边把我认为重要的点记录下来
感悟:后面继续深入的了解mysql,这些软件的作者的思想着实优秀....另外,极客时间的那个作者也是极度优秀的~~系统的介绍mysql我感觉是要比我自己零散的各种看博客要好。。。。嗯 最后,我自己也是要加油的!!!
binglog
  • binglog参数配置:sync_binlog
sync_binlog=0 的时候,表示每次提交事务都只写page cache ,不会持久化到硬盘
sync_binlog=1 的时候,表示每日提交事务之后都会写page cache,并且持久化到硬盘
sync_binlog=N 的时候,表示当积累N次事务之后就会一次性写入硬盘

心得
1,如果不是什么特别重要的数据,且并发比较高的时候可以把snc_binlog设置成100-1000中的某个值,这样可以提高性能
2,如果是对特别重要的数据,例如订单数据则建议将sync_binlog的值设置为1,这样能够保证哪怕数据库挂了,也可以保证不丢数据
3,当sync_binglog设置为0的时候,mysql会根据操作系统自动进行写入且mysql默认这个值就是0

redolog
  • redolog参数配置

  • innodb_flush_log_at_trx_commit

  • 设置为 0 的时候,表示每次事务提交时都只是把 redo log 留在 redo log buffer 中 ;
    设置为 1 的时候,表示每次事务提交时都将 redo log 直接持久化到磁盘;
    设置为2 的时候,表示每次事务提交都只是吧redolog写到page cache

  • 1 redolog和binlog是怎么关联起来的
    答:他们有一个共同的数据字段叫做xid,这样在崩溃恢复的,会按照顺序的扫描redolog
    - 如果碰到既有prepare的又有commit的事务,就直接提交
    - 如果只有prepare的,而没有commit的的事务,则拿着xid去binlog找相对应的事务

  • 2 有了redolog为什么还要有binlog?

    1. 因为redolog他是循环写,大小限制会导致一部分历史数据丢失,binlog的话则会是一直持久化
    2. 如果只有binglog的话,就不能做崩溃恢复了,历史原因是:myisam原生是不支持崩溃恢复的,而innodb在加入mysql引擎家族之前他就是支持的。 然后innodb接入mysql后发现既然binlog没有崩溃恢复的能力,那就用innodb原有的redo log了
    3. 如果直接用binglog,那么可能binlog写了,但是还没有commit,然后crash了,这样的话事务本身没有提交,但是从库如果是读binlog那就是已经读过去用了(做分布式啦)

未完待续-----

整个数据流程
  • 1, sql= update table_test set c=c+1 where id=3
  • 2, 取出id=3的数据(看是否在内存,如果是的话就直接取,不是的话再从磁盘里面读)
  • 3,将行值+1 然后写入新行
  • 4,新行更新到内存
  • 5, 写入redolog,处于prepare阶段
  • 6,写binlog
  • 7, 提交事务,处于commit状态
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值