做者:丁仪html
来源:https://chengxuzhixin.com/blog/post/mysql_zhong_yao_ri_zhi_wen_jian_zong_jie.htmlmysql
日志是全部应用的重要数据,MySQL 也有错误日志、查询日志、慢查询日志、事务日志等。本文简单总结下各类日志,以备查阅。sql
二进制日志 binlog 用于记录数据库执行的写入性操做(不包括查询)信息,以二进制的形式保存在磁盘中。使用任何存储引擎的 mysql 数据库都会记录 binlog 日志。在 binlog 中记录的是逻辑日志,也就是 SQL 语句。SQL 语句执行后,binlog 追加到日志文件中。能够设置 binlog 文件大小,超过大小后,自动建立新的文件。数据库
binlog 有三种格式,分别为 STATMENT、ROW 和 MIXED。工具
在实际应用中,binlog 主要用于主从复制和数据恢复。主从复制是指在 master 机器开启 binlog,经过某种方式把 binlog 发送给 slave 机器,slave 机器根据 binlog 内容进行数据操做,从而保证主从数据一致性。另外,经过使用 mysqlbinlog 工具能够从 binlog 恢复数据。post
在 MySQL 5.7 以后,内置默认引擎已经变动为 InnoDB 引擎。 InnoDB 引擎在处理事务时,能够设置日志写入磁盘的时机,默认状况下是每次 commit 时写入磁盘。也能够经过 sync_binlog 参数设置成系统自动判断或每 N 个事务写入一次。性能
查询日志记录了全部数据库请求的信息。不管这些请求是否获得了正确的执行。开启以后对性能有比较大的影响,所以使用很少。spa
慢查询日志用来记录执行时间超过某个阈值的语句。执行时间阈值能够经过 long_query_time 来设置,默认是 10 秒。慢查询日志须要手动开启,对性能有一些影响,通常不建议开启。慢查询日志支持将记录写入文件,也支持写入数据库表。3d
事务的四大特性之一是持久性。所以事务成功后,数据库的修改永久保存,不能由于任何缘由而回到原来的状态。redo log 是 InnoDB 引擎层实现的日志,并非全部引擎都有,用来记录事务对数据页的修改,能够在崩溃时用于恢复数据。redo log 包括内存中的日志缓冲和磁盘上的日志文件。执行 SQL 语句后,先写入日志缓冲,后续再一次性把多条缓冲写入文件。日志
在 InnoDB 中,数据页也会刷盘,redo log 存在的意义主要就是下降对数据页刷盘的要求。数据页的变动,redo log 没有必要所有保存。若是数据页刷盘比 redo log 快,则 redo log 的记录对于数据恢复意义不大;若是数据页刷盘比 redo log 慢,则 redo log 中比数据页快的部分能够用来快速恢复数据。所以 redo log 日志文件大小是固定的,当写到结尾时,会回到开头循环写日志。
事务的四大特性之一是原子性。对数据库的一系列操做,要么所有成功,要么所有失败,不容许部分红功部分失败。所以,须要记录数据的逻辑变化。原子性经过 undo log 来实现,好比事务中执行一条 insert 语句,undo log 就会记录一条 delete 语句;事务中执行一条 update 语句,undo log 就会记录一条相反的 update 语句。这样在事务失败时,就能够经过 undo log 来回滚到事务以前的状态。
微.信.搜.一.搜.程序之心,每周一三五原创更新。