MySQL 日志
慢查询日志(Slow query log)
- 慢查询⽇志由执⾏时间超过系统变量 long_query_time 指定的秒数的SQL语句组成,并且检
查的⾏数⼤于系统变量 min_examined_row_limit 指定值。被记录的慢查询需要进⾏优化,
可以使⽤mysqldumpslow客⼾端程序对慢⽇志进⾏分析汇总。- 获取初始锁的时间不计⼊执⾏时间,mysqld在执⾏完SQL语句并释放所有锁后才将符合条件的语
句写⼊慢速查询⽇志,因此⽇志顺序可能与执⾏顺序不同。
慢查询日志的参数
- long_query_time 的默认值是10,最小值是0;
- 默认情况下,不记录管理语句,也不记录不使用索引的查询
- 默认为关闭(不开启),要启⽤慢查询⽇志可以使⽤:请使用 –slow_query_log[={0|1}]
- 默认日志名为host_name-slow.log,可以使用slow_query_log_file=file_name修改
- 使用 –log-short-format 选项,以简要格式记录慢查询⽇志
- 要记录管理语句,启⽤ log_slow_admin_statements 系统变量。管理语句包括 ALTER
TABLE 、 ANALYZE TABLE 、 CHECK TABLE 、 CREATE INDEX 、 DROP INDEX 、
OPTIMIZE TABLE 和 REPAIR TABLE 。- 要记录不使⽤索引的查询,启⽤ log_queries_not_using_indexes 系统变量。当记录不使
⽤索引的查询时,⽇志会快速增长,通过设置系统变量
log_throttle_queries_not_using_indexes 限制每分钟写⼊慢查询⽇志同类查询的数
量,默认值是0,表示无限制。
二进制日志(Binary log)
Linux下默认开启
⼆进制⽇志包含数据库更改的"事件",不会记录 SELECT 和 SHOW ,例如:记录表的创建操作或
表数据的更改,⼆进制⽇志还包含每个语句更新数据时花费的时间信息,启动⼆进制⽇志,对服务
器性能稍微有些影响;
除了基于⾏的⽇志模式,它还包含可能进⾏更改数据的语句事件,例如 DELETE 操作没有匹配到
查找到的⾏;⼆进制⽇志的作用:
主从节点数据复制:从节点服务器读取主节点服务器上的⼆进制⽇志⽂件,并根据⼆进制⽇志
中记录的事件在从节点上执⾏相同的操作,保证主从节点服务器上数据⼀致,实现数据复制功
能。在主从复制专题中我们重点讲解复制过程;
数据恢复:从某个时间点恢复备份数据后,将重新执⾏备份时间点之后记录在⼆进制⽇志中的
事件。这些事件使数据库从备份点更新到当前最新状态
- ⼆进制⽇志的语句中如果涉及⽤⼾的密码,则由服务器进⾏加密,不会以纯⽂本形式出现。
错误⽇志(Error log)
- 主要记录MySQL服务器在启动、运行过程中发生的错误和异常情况。
- 错误日志功能是默认开启的,且无法被禁止。
⼀般查询⽇志(General query log)
- 记录客户端连接到MySQL服务器的时间、用户、主机等信息。
- 记录客户端提交的所有SQL语句,包括数据的增删改查等操作。
- 在MySQL数据库中,一般查询日志功能默认是关闭的。
中继日志(Relay Log)
- 中继日志在从服务器上记录主服务器上的二进制日志(Binary Log)事件。
- 从服务器通过读取和执行中继日志中的事件,实现与主服务器的数据同步。
- 默认关闭
DDL日志(Data Definition Language)
用于记录数据定义语言操作的日志。DDL操作用于管理、维护和修改数据库对象的结构,
例如创建和修改数据表、视图、索引和存储过程等。
默认关闭
回滚日志/撤销日志(undo log)
InnoDB存储引擎用来撤销SQL操作的一种日志。当一条写入类型的SQL语句执行时,都会记录Undo Log。
事务回滚:当事务出现错误或需要主动执行回滚操作时,InnoDB使用Undo Log将事务的操作撤销,
使数据库恢复到事务开始之前的状态。
MVCC(多版本并发控制):在并发场景下,InnoDB通过Undo Log支持MVCC,允许多个事务并发执行而不会互相阻塞。
Undo Log保存了数据的多个版本,事务可以根据隔离级别读取适当的版本,而不是总是最新的数据。
重做日志(redo log)
Redo Log记录了对数据库所做的物理修改操作,这些修改操作是在事务执行过程中产生的。
当系统发生故障或崩溃时,可以利用Redo Log进行数据的恢复,确保事务的持久性。