学校网站建设栏目有哪些,php网站开发所需要的软件,网站开发的功能需求和模块划分,Wordpress自动化目录标题 1. redo log 日志2. undo log 日志3.总结 1. redo log 日志
redo log日志是 MySQL 数据中的重要日志之一#xff0c;其本质是物理日志#xff0c;存放于 数据库的数据目录中 #xff0c;名称为#xff1a; ib_logfile 。它的功能主要是用于存放脏数据的日志… 目录标题 1. redo log 日志2. undo log 日志3.总结 1. redo log 日志
redo log日志是 MySQL 数据中的重要日志之一其本质是物理日志存放于 数据库的数据目录中 名称为 ib_logfile 。它的功能主要是用于存放脏数据的日志注脏数据是数据库中刚产生的还没来得及写入磁盘的新数据当数据发生故障时保证数据不丢失。 需要说明的是事务提交时修改磁盘的数据仍然是 Buffer Pool 中的数据redo log 只是为了保证 Buffer Pool 中新修改的数据不丢失进而保证事务提交时的数据完整性不能笼统地认为 redo log 是保存提交的数据的。 物理日志如Redo Log 记录的是数据页的物理变化即实际的数据块的内容。 用于在系统崩溃后恢复未完成的事务。 例如Redo Log记录了数据页从状态A变为状态B的具体字节变化。 为了数据安全MySQL 数据库在运行的过程中时时刻刻都在产生 redo log。
新更新的数据会首先写入 Buffer Pool 和 redo log 之中然后当事务提交时才会写入磁盘也就是说各种数据修改首先统一写入 Buffer Pool 和 redo log 之中然后再统一写入磁盘。Buffer Pool 中的数据写入磁盘文件是受innodb_flush_log_at_trx_commit控制的其配置的值为0、1 和 2。其详细情况如下
当配置为 0 时主要受 InnoDB 存储引擎中的 Master 线程的周期控制一般是一秒或十秒刷新一次。当配置为 1 时一旦事务提交Buffer Pool 和 redo log 中的数据将立即写入磁盘此时即便数据库宕机数据也能恢复比较安全但是可能会造成一定程度上的延时。当配置为 2 时事务提交数据不会立即写入磁盘此时如果数据库宕机则可能会丢失部分数据优点就是性能比较高。但是每次修改数据redo log 中的数据都会有一个标识这个标识叫 checkpoint当数据库发生宕机时数据是从最近的 checkpoint 中恢复数据的最大程度减少数据丢失。
数据库中的innodb_flush_log_at_trx_commit的值可以使用下方的方法查询
mysql show global variables like innodb_flush_log_at_trx_commit;
---------------------------------------
| Variable_name | Value |
---------------------------------------
| innodb_flush_log_at_trx_commit | 1 |
---------------------------------------
1 row in set (0.01 sec)默认设置MySQL 的默认设置通常是 innodb_flush_log_at_trx_commit 1这是为了确保数据的安全性。
生产环境在生产环境中根据应用的具体需求来选择合适的设置。对于大多数应用来说innodb_flush_log_at_trx_commit 2 是一个比较平衡的选择。
2. undo log 日志
undo log 是 MySQL 数据库中另一个重要的日志之一其本质是一个逻辑日志存放于 MySQL 数据库的表空间之中也就是内存之中。它的主要作用是用于数据回滚。 逻辑日志是指记录了数据修改前的状态或逻辑操作的日志而不是直接记录数据页的物理变化。具体来说逻辑日志记录的是数据的旧值以及如何恢复这些旧值的操作。 当发了红包时如果数据库恰巧发生故障为了保证数据的安全及修改的数据不会只修改一部分就需要使用到数据的回滚这时 undo log 日志就派上了用场。
**那么你知道undo log是怎么回滚日志的吗**对于数据恢复来说主要有两种方式分别是物理恢复和逻辑恢复那么undo log就是通过逻辑恢复的方式恢复数据。例如宋押司发给李逵的红包发现心有不甘于是撤回。那么这个过程之中先是INSERT或者UPDATE将宋押司的 50 块钱INSERT或者UPDATE给李逵撤回则是将INSERT或者UPDATE转换成DELETE和UPDATE的过程。
上文中我们说了数据库的事务具有持久性等四个特性所以一旦事务提交undo log 中保存的数据也就随即不再需要。但是此时 undo log 中保存的数据并不是立即删除而是像垃圾一样丢弃到数据库中的 undo 链表之中而后由 MySQL 之中的 purge 线程统一清理删除这个做法避免了其他事务回滚造成数据错误同时也提高了数据库的性能。
3.总结
MySQL 数据库的事务主要是由redo log和undo log来实现的这是我们理解 MySQL 事务原理的关键所在。
redo log是在事务执行之前才产生的并且在事务执行过程中redo log也是不断产生当产生的脏数据全部都写入磁盘之后redo log随即也就完成了它的使命。undo log是在事务执行之前产生的事务回滚时使用undo log日志中的数据覆盖新修改的数据进而达到事务回滚的效果。需要注意的是undo log回滚数据之后并不是立即删除的而是由purge线程去探测可还有其他的事务正在使用该undo log日志如果有则保留给予其他的事务来使用如果没有才会清除该undo log释放空间。 版权声明本文内容由网络用户投稿版权归原作者所有本站不拥有其著作权亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容请联系我们处理核实后本网站将在24小时内删除侵权内容。