1.redlog:

    1.1 什么是redolog:

        redlog是重做日志,是Innodb存储引擎独有的,他让MySQL在崩溃的时候具有了恢复数据的能力,即在数据库发生意外的时候,可以进行数据恢复;

        redlog日志会备份的是事务执行过程中的修改数据,是事务过程中最新的数据位置。

     1.2  redolog日志的工作原理

         redolog是存储了数据被修改的值,当提交了一个事务的时候,InnoDB会先把要修复的数据写入到日志中,然后再去修改缓冲池里面的真正数据页。redolog本身也是由两个部分组成,分别是在内存中的日志缓存(redolog buffer)和在磁盘中的重做日志文件(redologfile);前者是存在内存中的,容易丢失,后者是存在硬盘中的,丢失概率较低。

        对redolog的工作原理举例理解就是

        每次当我们上课在记笔记的时候,老师讲的太快,内容又有很多,若果我们直接记在笔记本里面,就会变成这一块跟不上,留出位置后在补上的话又发现留的位置是不够的;又有的时候老师语速太快,跟的着急然后就字体写飞了,后面看压根不知道自己刚刚写的是个啥,只能看出是个鬼画符(谁不想记笔记的本子美美的),不仅浪费了时间,还不利于后续的查看;相反,我们可以先将课上的笔记记录在自己日常练习的小本本上,代有时间的时候,在一字一字的往笔记本上写。这样就可以保证笔记本的赏心悦目。如果说练习的小本本没有了,那我们可以先将以前记录的笔记先写到笔记本上面,然后将以前写过的笔记划掉,重新在写(虽然划掉也没地方写了,但是意思是那么个意思,理解就好~~~)。

WAL技术。

        1.4 redolog的配置参数

             如何查看redolog的参数:

show variables like '%innodb_log%';

查看的结果是:

        

mysql binlog消息格式 mysql binlog redo_存储引擎

2.binlog:

       2.1什么是binlog  

               binlog是一个二进制格式的文件,用于记录用户对数据库更新的SQL语句信息,默认情况下,binlog是二进制格式的,不能使用文本工具的命令进行查看,而是使用mysqlbinlog解析查看。

        2.2binlog的功能

                当数据写入到数据库的时候,会同时把更新的SQL语句写入到相应的binlog文件里面,同时在使用mysqldump进行备份的时候,只是对一段时间的数据进行了全局备份,但是如果备份后发现数据库服务器产生故障,这个时候就要用到binlog日志了。

3.binlog和redolog的区别:

        1).redo log是在InnoDB存储引擎层产生,而binlog是mysql数据库的上层产生,而且binlog是二进制格式的日志,不仅仅针对InnoDB存储引擎。

        2).两种日志记录的内容形式不同,MySQL的binlog是逻辑日志,而InnoDB存储引擎层面的重做日志是物理日志。

        3).两种日志与记录写入磁盘的时间点不同,二进制日志只在事物提交完成后进行一次写入,而redo log的重做日志在事物的进行过程中不断地被写入。

        4).binlog不是循环使用,在写满或者重启之后,会生成新的binlog文件,但是redo log是循环使用的。

4.   为什么两个日志都要用,只用其中一个不可以吗

         首先,MySQL在最开始用的不是InnoDB模型,而是使用的自带的MySAM引擎,但是他没有一个刷新自身的功能,而是binlog的日志只用于归档,所以只依靠binlog的话是没有crash-safe的功能的,所以需要InnoDB的crash-safe来相辅相成吧。