位置:编程技术网 > 运维管理 > 正文 >

MySql中必须知道的至关重要的三种日志

2021年03月29日 15:34来源:未知手机版

吕丽君和甘比面相,上海阳光花城,全民雀神

前言:

MySql 中有三种 「log」 是十分中要的,因为MySql之所以能支持 事务(实现持久化、回滚等)、数据库崩溃恢复、主从复制等,都是基于这三种日志的。
至关重要的三种log:binlog 二进制日志redo log 重做日志undo log 回滚日志本文主线:简要介绍三种日志MySql事务处理中三种日志承担的角色简要介绍三种日志: 1、binlog 二进制日志:?
binlog 二进制日志(归档日志),这个日志是由MySql的server层进行维护的;不管当前MySql使用的是什么存储引擎,binlog归档日志都是支持的;
对MySql的server层不清楚的大大们可以参考此文章:查询SQL的执行流程
?

「作用:」

用于复制,在主从复制中,从库利用主库上的binlog进行重播,实现主从同步。数据恢复,用于数据库的基于时间点的还原。

>

逻辑格式的日志,binlog是用于记录所有数据库表结构和表数据变更的二进制日志,比如insert、update、delete、create、truncate等等操作,不会记录select、show操作,因为它们没有对数据本身发生改变。

「常见格式:」


>

具体存在什么样的bug可以参考此文章:互联网项目中mysql应该选什么事务隔离级别

「注意:」

binlog二进制日志文件在默认情况下并没有启动,需要手动进行开启的;有人可能会质疑,开启此日志文件的话,对数据库的性能会产生什么样的影响?

质疑是对的,确实开启此日志文件会影响到数据库的性能,但是这个影响是十分有限的,根据MySql的官网手册了解到,开启此日志会使性能下降1%左右,这个损失大体上是可以接受的。

2、redo log 重做日志:?
redo log重做日志,这个日志是由MySql的innodb存储引擎提供维护的,此日志文件只存在于innodb存储引擎下;
?

「作用:」

确保事务的持久性。redo日志记录事务执行后的状态,用来恢复未写入data file的已成功事务更新的数据。防止在发生故障的时间点,尚有脏页未写入磁盘,在重启mysql服务的时候,根据redo log进行重做,从而达到事务的持久性这一特性。

各位大大,如果上面这段话如果看得不是很明白,可以继续往下看看呀,通过下文中事务的例子可以很好理解;

「内容:」

物理格式的日志,记录的是物理数据页面的修改的信息,简单说就是记录着xxx页做了xxx修改;

innodb 存储引擎提供了重做日志文件组(group),每个重做日志文件组包含着重做日志文件;默认是提供了一个重做日志文件组,文件组下包含两个大小相同的重做日志文件;

innodb存储引擎的重做日志文件写入流程:先写重做日志文件1,当文件1被顺序写满时,会切换到重做日志文件2,再当重做日志文件2也被写满时,会再切换到重做日志文件1中,依次循环; 所以说重做日志文件是循环覆盖写入的。

因为重做日志是循环覆盖写入的,所以不能使用其进行整个数据库的数据恢复,它只能保证数据库宕机时的事务的完整性数据;如果想要恢复全部数据的话,只能使用 binlog 二进制日志(归档日志)进行恢复。

注意:大家可以手动修改重做日志文件组下的文件数量,并可以指定每个重做日志文件的大小,通过下面的参数:

innodb_log_file_size 指定重做日志文件的大小innodb_log_files_in_group 重做日志文件组下的文件数量

「扩展:」

注意:重做日志文件的大小设置对于innodb存储引擎的性能有很大的影响。

本文地址:http://www.reviewcode.cn/yunweiguanli/202974.html 转载请注明出处!

今日热点资讯