mysql各种日志文件介绍
所属分类 mysql
浏览量 2231
重做日志(redo log)
回滚日志(undo log)
二进制日志(binlog)
错误日志(errorlog)
慢查询日志(slow query log)
一般查询日志(general log)
中继日志(relay log)
通用日志 记录建立的客户端连接和执行的语句
show variables like '%log%'
重做日志(redo log)
确保事务的持久性
重做日志缓存
innodb_log_buffer
show variables like 'innodb_log_buffer_size'
日志缓冲区日志何时刷新到磁盘?
Master Thread 每秒刷新一次
事务提交时
当重做日志缓存可用空间少于一半时
回滚日志(undo log)
事务回滚 提供多版本并发控制下的读(MVCC),也即非锁定读
事务开始之前,将当前是的版本生成undo log,undo 也会产生 redo 来保证undo log的可靠性
当事务提交之后,undo log并不能立马删除,
而是放入待清理的链表,由purge线程判断是否由其他事务在使用undo段中表的上一个事务之前的版本信息,决定是否可以清理undo log的日志空间。
MySQL5.6之前,undo表空间位于共享表空间的回滚段中,共享表空间的默认的名称是ibdata,位于数据文件目录中。
MySQL5.6之后,undo表空间可以配置成独立的文件,需要在配置文件中配置,完成数据库初始化后生效且不可改变undo log文件的个数
MySQL5.7之后的独立undo 表空间配置参数如下
# undo独立表空间存放目录
innodb_undo_directory = /data/undospace/
# 回滚段为128KB
innodb_undo_logs = 128
# 指定有4个undo log文件
innodb_undo_tablespaces = 4
undo可以使用共享表空间,innodb_data_file_path
undo在事务开始之前保存的被修改数据的一个版本,产生undo日志的时候,同样会伴随类似于保护事务持久化机制的redolog的产生。
二进制日志(binlog)
作用:
用于复制,主从复制,从库利用主库上的binlog进行重播,实现主从同步。
基于时间点的还原。
内容:
逻辑格式的日志,可以简单认为就是执行过的事务中的sql语句。
但又不完全是sql语句这么简单,而是包括了执行的sql语句(增删改)反向的信息,
也就意味着delete对应着delete本身和其反向的insert;update对应着update执行前后的版本的信息;insert对应着delete和insert本身的信息。
可以使用 mysqlbinlog 解析 binlog
事务提交的时候,一次性将事务中的sql语句(一个事物可能对应多个sql语句)按照一定的格式记录到binlog中。
与redo log的差别 ,redo log在事务开始之后逐步写入磁盘。
较大的事务,提交(commit)很快,但是开启了bin_log之后,会变慢
binlog 在事务提交时一次性写入
默认保留时间配置 expire_logs_days
binlog 与 redolog 的区别
作用不同:redo log是保证事务的持久性的,是事务层面的,binlog作为还原的功能,是数据库层面的(当然也可以精确到事务层面的)。
内容不同:redo log是物理日志,是数据页面修改之后的物理记录,binlog是逻辑日志,可以简单认为记录的就是sql语句
产生的时间,可以释放的时间,清理机制,不同。
恢复数据效率,基于物理日志的redo log 高于 逻辑日志 binlog
MySQL通过两阶段提交过程来完成事务的一致性的,也即redo log和binlog的一致性的,
理论上是先写redo log,再写binlog,两个日志都提交成功(刷入磁盘),事务才算真正的完成。
redolog 和 binglog 配置
innodb_flush_log_at_trx_commit = N
N=0 每隔一秒,把事务日志缓存区的数据写到日志文件中,以及把日志文件的数据刷新到磁盘上;
N=1 每个事务提交时候,把事务日志从缓存区写到日志文件中,并且刷新日志文件的数据到磁盘上;
N=2 每事务提交的时候,把事务日志数据从缓存区写到日志文件中;每隔一秒,刷新一次日志文件,但不一定刷新到磁盘上,而是取决于操作系统的调度;
sync_binlog = N
N>0 每向二进制日志文件写入N条SQL或N个事务后,则把二进制日志文件的数据刷新到磁盘上;
N=0 不主动刷新二进制日志文件的数据到磁盘上,而是由操作系统决定;
推荐配置组合:
N=1,1 适合数据安全性要求非常高,而且磁盘IO写能力足够支持业务,比如充值消费系统;
N=1,0 适合数据安全性要求高,磁盘IO写能力支持业务不富余,允许备库落后或无复制;
N=2,0或2,m(0 show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
#查看日志【所生成的全部日志文件】
mysql> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 154 |
+------------------+-----------+
1 row in set (0.00 sec)
#可以查看对某个日志中具体的操作
mysql> show binlog events in 'mysql-bin.000001';
+------------------+-----+----------------+-----------+-------------+--------------------------------------------
------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info
|
+------------------+-----+----------------+-----------+-------------+--------------------------------------------
------------+
| mysql-bin.000001 | 4 | Format_desc | 1 | 123 | Server ver: 5.7.22-0ubuntu0.16.04.1-log, Bi
nlog ver: 4 |
| mysql-bin.000001 | 123 | Previous_gtids | 1 | 154 |
|
+------------------+-----+----------------+-----------+-------------+--------------------------------------------
------------+
2 rows in set (0.00 sec)
使用mysqlbinlog命令来查看二进制日志文件中的的内容
通用日志
mysql> show variables like '%gene%';
+------------------+---------------------------------+
| Variable_name | Value |
+------------------+---------------------------------+
| general_log | OFF |
| general_log_file | /var/lib/mysql/loggeneral.log |
+------------------+---------------------------------+
2 rows in set (0.03 sec)
慢查询日志
slow_query_log = 1时,记录执行时间超过long_query_time的所有SQL
mysql> show variables like '%slow_query%';
+---------------------+--------------------------------------+
| Variable_name | Value |
+---------------------+--------------------------------------+
| slow_query_log | OFF |
| slow_query_log_file | /var/lib/mysql/54b78b286d5c-slow.log |
+---------------------+--------------------------------------+
2 rows in set (0.01 sec)
可以通过mysqldumpslow命令来查看和分析慢查询日志
mysqldumpslow /var/lib/mysql/54b78b286d5c-slow.log -t 2 -s al
Reading mysql slow query log from /var/lib/mysql/iZbp1akzlq26t30fbsdwh7Z-slow.log
-- count 执行次数
-- time 执行时间
-- lock 锁定时间
-- rows 返回条数
-- root[root]@localhost 通过那个用户执行的
Count: 5 Time=0.00s (0s) Lock=0.01s (0s) Rows=5.0 (25), root[root]@localhost
上一篇
下一篇
kafka高性能机制
科创板上市指南
360N4使用技巧
mysql运维命令
nginx安装及配置
nginx知识点整理