mysql物理日志和逻辑日志_mysql物理日志redo log和逻辑日志 binlog
1、redo log(InnoDB引擎特有的日志)
1.1、有了 redo log,InnoDB 就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为 crash-safe。具体来说,当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写到 redo log里面,并更新内存,这个时候更新就算完成了。同时,InnoDB 引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做
1.2、innodb_flush_log_at_trx_commit 这个参数设置成 1 的时候,表示每次事务的 redo log 都直接持久化到磁盘。建议你设置成 1,这样可以保证 MySQL 异常重启之后数据不丢失
2、binlog(Server层日志)
2.1、sync_binlog 这个参数设置成 1 的时候,表示每次事务的 binlog 都持久化到磁盘。这个参数也建议你设置成 1,这样可以保证 MySQL 异常重启之后 binlog 不丢失
3、区别
3.1、redo log 是 InnoDB 引擎特有的;binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用
3.2、redo log 是物理日志,记录的是“在某个数据页上做了什么修改”;binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如“给 ID=2 这一行的 c 字段加 1 ”
3.3、redo log 是循环写的,空间固定会用完;binlog 是可以追加写入的。“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志
4、InnoDB 引擎在执行update T set c=c+1 where ID=2这个简单的 update 语句时的内部流程
4.1、执行器先找引擎取 ID=2 这一行。ID 是主键,引擎直接用树搜索找到这一行。如果 ID=2 这一行所在的数据页本来就在内存中,就直接返回给执行器;否则,需要先从磁盘读入内存,然后再返回。
4.2、执行器拿到引擎给的行数据,把这个值加上 1,比如原来是 N,现在就是 N+1,得到新的一行数据,再调用引擎接口写入这行新数据。
4.3、引擎将这行新数据更新到内存中,同时将这个更新操作记录到 redo log 里面,此时 redo log 处于 prepare 状态。然后告知执行器执行完成了,随时可以提交事务。
4.4、执行器生成这个操作的 binlog,并把 binlog 写入磁盘。
4.5、执行器调用引擎的提交事务接口,引擎把刚刚写入的 redo log 改成提交(commit)状态,更新完成
————————————————
版权声明:本文为CSDN博主「既照月白」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42514288/article/details/113461061
相关文章
- 【MySQL高级】MySql中常用工具及Mysql 日志
- 深入探索MySQL查询日志(mysql查询log)
- MySQL Status Opened_tables 数据库状态作用意思及如何正确
- 掌握 MySQL 日志查看技巧(mysql查看log)
- MySQL数据库导入:简易软件解决方案(mysql数据库导入软件)
- MySQL如何处理大数据量存储(mysql大数据量存储)
- 库 MySQL:构建逻辑型数据库的智慧之选(mysql逻辑型数据)
- MySQL单表同步实现指南(mysql单表同步)
- MySQL的一对多关联性分析(一对多mysql)
- MySQL 触发器实现数据逻辑判断(mysql触发器判断)
- 如何在MySQL中创建只读用户?(mysql创建只读用户)
- 如何使用 MySQL 导出所有表?快速简单的步骤(mysql导出所有表)
- MySQL中使用IF语句进行复合逻辑判断(mysql if 逻辑)
- MySQL中实现枚举类型的简单方式(mysql中枚举类型)
- 数据库中的MySQL 理解Mysql数据库的重要性(MySql中mysql)
- 利用MySQL中的log命令行优化数据库管理(mysql中log命令行)
- MySQL中IMG字段的作用简述(mysql中img是什么)
- MySQL中的AND和OR使用逻辑运算符优化查询语句(mysql中and与or)
- MySQL实现两张表的取非交集操作(mysql两表取非交集)
- um如何使用C 和 MySQL强化简历(c mysql res)
- MySQL恢复分布式Log文件指导手册(.ldf mysql)
- MySQL日志之三错误日志二进制日志慢查询日志(mysql三个log)
- MySQL面试秘籍精华万字全解(mysql万字精华面试)
- 解决MySQL下载闪退问题(mysql下载闪退)
- MySQL下载及安装教程快速掌握MySql下载及安装方法,更高效地使用MySql数据库(mysql下载了在哪)
- Mysql 数据库丢失别慌来了解一下 MySQL 不见的可能原因及解决办法(mysql不见)
- 深入探索MySQL中不并列排名的实现方法(mysql 不并列排名)