台州市城市建设规划局网站,多用户智能网站建设源码,建设网站的目的,网址浏览器重要日志模块 日志文件bin logredo log**关于循环写入和擦除的checkpoint 规则**redo log 怎么刷入磁盘的 binlog 和 redo log 有什么区别#xff1f;undo log 日志文件 错误日志#xff08;error log#xff09;#xff1a; 错误日志文件对 MySQL 的启动、运行、关闭过程进… 重要日志模块 日志文件bin logredo log**关于循环写入和擦除的checkpoint 规则**redo log 怎么刷入磁盘的 binlog 和 redo log 有什么区别undo log 日志文件 错误日志error log 错误日志文件对 MySQL 的启动、运行、关闭过程进行了记录能帮助定位 MySQL 问题。慢查询日志slow query log 慢查询日志是用来记录执行时间超过 long_query_time 这个变量定义的时长的查询语句。通过慢查询日志可以查找出哪些查询语句的执行效率很低以便进行优化。一般查询日志general log 一般查询日志记录了所有对 MySQL 数据库请求的信息无论请求是否正确执行。二进制日志bin log 关于二进制日志它记录了数据库所有执行的 DDL 和 DML 语句除了数据查询语句 select、show 等以事件形式记录并保存在二进制文件中。
还有两个 InnoDB 存储引擎特有的日志文件
重做日志redo log 重做日志至关重要因为它们记录了对于 InnoDB 存储引擎的事务日志。回滚日志undo log 回滚日志同样也是 InnoDB 引擎提供的日志顾名思义回滚日志的作用就是对数据进行回滚。当事务对数据库进行修改InnoDB 引擎不仅会记录 redo log还会生成对应的 undo log 日志如果事务执行失败或调用了 rollback导致事务需要回滚就可以利用 undo log 中的信息将数据回滚到修改之前的样子。
bin log bin log归档日志是Server层实现的所有引擎都可以使用。bin log是逻辑日志记录的是这个语句的原始逻辑比如“给ID2这一行的c字段加1” bin log 是追加写入的“追加写”指的是bin log 文件写到一定大小后会切换下一个并不会覆盖以前的日志。 bin log 只在事务提交前进行提交也就是只写磁盘一次。
redo log
redo log 是InnoDB引擎特有的只记录InnoDB存储引擎的日志。redo log 是物理日志记录的是关于每个页Page的更改的物理情况。redo log是固定大小的它是循环写入和擦除的。bin log 在事务进行的过程中不断有redo ertry被写入redo log中。
关于循环写入和擦除的checkpoint 规则
重做日志缓存、重做日志文件都是以块block的方式进行保存的称之为重做日志块redo log block,块的大小是固定的 512 字节。我们的 redo log 它是固定大小的可以看作是一个逻辑上的 log group由一定数量的log block 组成。
它的写入方式是从头到尾开始写写到末尾又回到开头循环写。 其中有两个标记位置
write pos是当前记录的位置一边写一边后移写到第 3 号文件末尾后就回到 0 号文件开头。checkpoint是当前要擦除的位置也是往后推移并且循环的擦除记录前要把记录更新到磁盘。
write pos和checkpoint之间的是空着的部分可以用来记录新的操作。如果write pos追上checkpoint表示 redo log 日志已经写满。这时候就不能接着往里写数据了需要执行checkpoint规则腾出可写空间把checkpoint推进一下。 所谓的checkpoint 规则就是 checkpoint 触发后将 buffer 中日志页都刷到磁盘。
有了redo logInnoDB就可以保证即使数据库发生异常重启之前提交的记录都不会丢失这个能力称为crash-safe.
redo log 怎么刷入磁盘的
redo log 的写入不是直接落到磁盘而是在内存中设置了一片称之为redo log buffer的连续内存空间也就是redo 日志缓冲区。 什么时候会刷入磁盘 在如下的一些情况中log buffer 的数据会刷入磁盘 log buffer 空间不足时 log buffer 的大小是有限的如果不停的往这个有限大小的 log buffer 里塞入日志很快它就会被填满。如果当前写入 log buffer 的 redo 日志量已经占满了 log buffer 总容量的大约一半左右就需要把这些日志刷新到磁盘上。 事务提交时 在事务提交时为了保证持久性会把 log buffer 中的日志全部刷到磁盘。注意这时候除了本事务的可能还会刷入其它事务的日志。 后台线程输入 有一个后台线程大约每秒都会刷新一次log buffer中的redo log到磁盘。 正常关闭服务器时 触发 checkpoint 规则
binlog 和 redo log 有什么区别
bin log 会记录所有与数据库有关的日志记录包括 InnoDB、MyISAM 等存储引擎的日志而 redo log 只记 InnoDB 存储引擎的日志。记录的内容不同bin log 记录的是关于一个事务的具体操作内容即该日志是逻辑日志。而 redo log 记录的是关于每个页Page的更改的物理情况。写入的时间不同bin log 仅在事务提交前进行提交也就是只写磁盘一次。而在事务进行的过程中却不断有 redo ertry 被写入 redo log 中。写入的方式也不相同redo log 是循环写入和擦除bin log 是追加写入不会覆盖已经写的文件。
undo log
Undo Log是InnoDB十分重要的组成部分它的作用横贯InnoDB中两个最主要的部分并发控制Concurrency Control和故障恢复Crash Recovery. undo log是一种用于撤销回退的日志在事务没提交之前MySQL会先记录更新前的数据到 undo log日志文件里面当事务回滚时或者数据库崩溃时可以利用 undo log来进行回退。 与 redo log 用于数据的灾后重新提交不同undo log 主要用于数据修改的回滚。 与 redo log 记录的是物理页的修改不同undo log 记录的是逻辑日志。 数据库事务四大特性中有一个是原子性具体来说就是 原子性是指对数据库的一系列操作要么全部成功要么全部失败不可能出现部分成功的情况。 实际上原子性底层就是通过undo log实现的。当 delete 一条记录时undo log 中会记录一条对应的 insert 记录反之亦然当 update 一条记录时它记录一条对应相反的 update 记录如果 update 的是主键则是对先删除后插入的两个事件的反向逻辑操作的记录。