mysql日志机制及原理

本文详细介绍了MySQL的三种日志机制:redo log用于保证事务的持久性,binlog用于主从复制和数据恢复,undo log确保回滚操作。redo log分为内存的redo log buffer和磁盘的ib_logfile,写入策略由innodb_flush_log_at_trx_commit参数控制。binlog记录所有修改操作,日志格式可通过binlog_format设置。undo log在事务提交后按类型决定何时删除,回滚段管理undo log的存储。错误日志和通用查询日志分别记录数据库运行中的错误和所有用户操作。
摘要由CSDN通过智能技术生成

redo log 重做日志原理详解

innodb_log_buffer_size:设置redo log buffer大小参数,默认16M最大值是4096M,最小值为1M。

show variables like ‘%innodb_log_buffer_size%’;

innodb_log_group_home_dir:设置redo log文件存储位置参数默认值为"./",即innodb数据文件存储位置,其中的 ib_logfile0 和 ib_logfile1 即为redo log文件。

show variables like ‘%innodb_log_group_home_dir%’;

innodb_log_files_in_group:设置redo log文件的个数,命名方式如: ib_logfile0, iblogfile1… iblogfileN。默认2个,最大100个

show variables like ‘%innodb_log_files_in_group%’;

innodb_log_file_size:设置单个redo log文件大小,默认值为48M。最大值为512G,注意最大值指的是整个 redo log系列文件之和,即(innodb_log_files_in_group * innodb_log_file_size)不能大于最大值512G。

show variables like ‘%innodb_log_file_size%’;

redo log 写入磁盘过程分析:

redo log 从头开始写,写完一个文件继续写另一个文件,写到最后一个文件末尾就又回到第一个文件开头循环写,如下面这个图所示。

write pos
是当前记录的位置,一边写一边后移,写到第 3 号文件末尾后就回到 0 号文件开头。


checkpoint
当前要擦除的位置,也是往后推移并且循环的,擦除记录前要把记录更新到数据文件(ibd)里。
write poscheckpoint 之间的部分就是空着的可写部分,可以用来记录新的操作。
如果 write pos 追上checkpoint,表示redo log写满了,这时候不能再执行新的更新,得停下来先擦掉一些记录,把 checkpoint 推进一下

relog写入策略:

innodb_flush_log_at_trx_commit:这个参数控制 redo log 的写入策略,它有三种可能取值:
        设置为0: 表示每次事务提交时都只是把 redo log 留在 redo log buffer 中,数据库宕机可能会丢失数据。
        设置为1(默认值):表示每次事务提交时都将 redo log 直接持久化到磁盘数据最安全,不会因为数据库宕机丢失数据,但是效率稍微差一点,线上系统推荐这个设置。
        设置为2:表示每次事务提交时都只是把 redo log 写到操作系统的缓存page cache里,这种情况如果数据库宕机是不会丢失数据的,但是操作系统如果宕机了page cac

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长情知热爱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值