zoukankan      html  css  js  c++  java
  • mysql日志介绍

    1. 错误日志

       错误日志记录的事件:

       a. 服务器启动关闭过程中的信息

       b. 服务器运行过程中的错误信息

       c. 事件调试器运行一个事件时间生的信息

       d. 在从服务器上启动从服务器进程时产生的信息

    2. 查询日志

       查询日志记录查询语句与启动时间,建议不是在调试环境下不要开启查询日志,因为会不断占据你的磁盘空间,并会产生大量的IO。

       查询日志有两种,分别是慢查询日志(Slow Query Log)和通用查询日志(General Query Log)。而且Mysql的查询日志不仅可以记录到文件,还能自动保存到MySql数据库中的表对象里。

    3. 二进制日志,即 binlog日志

       binlog日志用于记录所有更新且提交了数据或者已经潜在更新提交了数据(例如,没有匹配任何行的一个DELETE)的所有语句。语句以“事件”的形式保存,它描述数据更改。

       binlog作用

       a. 恢复使能够最大可能地更新数据库,因为二进制日志包含备份后进行的所有更新。

       b. 在主复制服务器上记录所有将发送给从服务器的语句。

    4. 事务日志

        a. redo log

            因为redo log记录的是数据页的物理变化,因此恢复的时候速度比逻辑日志(如二进制日志)要快很多。而且,innodb自身也做了一定程度的优化,让恢复速度变得更快。

            redo log包括两部分:一是内存中的日志缓冲(redo log buffer),该部分日志是易失性的;二是磁盘上的重做日志文件(redo log file),该部分日志是持久的。

            在概念上,innodb通过force log at commit机制实现事务的持久性,即在事务提交的时候,必须先将该事务的所有事务日志写入到磁盘上的redo log file和undo log file中进行持久化。

            MySQL支持用户自定义在commit时如何将log buffer中的日志刷log file中。这种控制通过变量 innodb_flush_log_at_trx_commit 的值来决定。该变量有3种值:0、1、2,默认为1。但注意,这个变量只是控制commit动作是否刷新log buffer到磁盘。

           在启动innodb的时候,不管上次是正常关闭还是异常关闭,总是会进行恢复操作。

          因为redo log记录的是数据页的物理变化,因此恢复的时候速度比逻辑日志(如二进制日志)要快很多。而且,innodb自身也做了一定程度的优化,让恢复速度变得更快。

          记录的是新数据的备份。在事务提交前,只要将Redo Log持久化即可,不需要将数据持久化。当系统崩溃时,虽然数据没有持久化,但是RedoLog已经持久化。系统可以根据RedoLog的内容,将所有数据

    复到最新的状态。

        b. undo log

            undo log有两个作用:提供回滚和多个行版本控制(MVCC)。

            在数据修改的时候,不仅记录了redo,还记录了相对应的undo,如果因为某些原因导致事务失败或回滚了,可以借助该undo进行回滚。

            undo log和redo log记录物理日志不一样,它是逻辑日志。可以认为当delete一条记录时,undo log中会记录一条对应的insert记录,反之亦然,当update一条记录时,它记录一条对应相反的update记录。当执行rollback时,就可以从undo log中的逻辑记录读取到相应的内容并进行回滚。有时候应用到行版本控制的时候,也是通过undo log来实现的:当读取的某一行被其他事务锁定时,它可以从undo log中分析出该行记录以前的数据是什么,从而提供该行版本信息,让用户实现非锁定一致性读取。

            undo log是采用段(segment)的方式来记录的,每个undo操作在记录的时候占用一个undo log segment。

            另外,undo log也会产生redo log,因为undo log也要实现持久性保护。

            当事务提交的时候,innodb不会立即删除undo log,因为后续还可能会用到undo log,如隔离级别为repeatable read时,事务读取的都是开启事务时的最新提交行版本,只要该事务不结束,该行版本就不能删除,即undo log不能删除。

            但是在事务提交的时候,会将该事务对应的undo log放入到删除列表中,未来通过purge来删除。并且提交事务时,还会判断undo log分配的页是否可以重用,如果可以重用,则会分配给后面来的事务,避免为每个独立的事务分配独立的undo log页而浪费存储空间和性能。

            通过undo log记录delete和update操作的结果发现:(insert操作无需分析,就是插入行而已)

            delete操作实际上不会直接删除,而是将delete对象打上delete flag,标记为删除,最终的删除操作是purge线程完成的。

            update分为两种情况:update的列是否是主键列。

            如果不是主键列,在undo log中直接反向记录是如何update的。即update是直接进行的。

            如果是主键列,update分两部执行:先删除该行,再插入一行目标行。

        

    5. 慢查询日志:

         慢查询日志是用来记录执行时间超过指定时间的查询语句。通过慢查询日志,可以查找出哪些查询语句的执行效率很低,以便进行优化。一般建议开启,它对服务器性能的影响微乎其微,但是可以记录mysql服务器上执行了很长时间的查询语句。可以帮助我们定位性能问题的。

    6. 中继日志:

        什么是中继日志?从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件,然后从服务器SQL线程会读取relay-log日志的内容并应用到从服务器,从而使从服务器和主服务器的数据保持一致

        

    参见:https://blog.csdn.net/mydriverc2/article/details/50629599

             https://www.cnblogs.com/andy6/p/6921515.html

             http://blog.51cto.com/pangge/1319304

    https://juejin.im/post/5b7c0aabf265da438415b9eb

    https://juejin.im/entry/5ba0a254e51d450e735e4a1f

    https://blog.51cto.com/pangge/1319304

  • 相关阅读:
    js数组元素的添加和删除
    jquery中prop()方法和attr()方法的区别浅析
    jquery选择器 之 获取父级元素、同级元素、子元素
    jQuery 序列化表单数据 serialize() serializeArray()
    Awesome Python,Python的框架集合
    关于树莓派HDMI转VGA线接显示器黑屏
    python爬虫xpath的语法
    爬虫下载百度贴吧图片
    项目经理的磨练(2) 科学的安排项目日程安排
    项目经理的磨练
  • 原文地址:https://www.cnblogs.com/Jtianlin/p/10235631.html
Copyright © 2011-2022 走看看