一、介绍

mysql日志记录是mysql重要组成部分如redolog和undolog是实现acid和mvcc是重要部分。八种日志是我们了数据库运行状态的各种信息,包括错误信息、查询信息、事务信息等等,是进行异常排查、性能优化、数据恢复和备份的关键基础。

二、介绍

mysql 日志查询sql mysql查看日志内容_二进制日志


这里注意是redo Log和Undo Log是innnodb的日志其他引擎不一定有哦。二其他的六种日志中只有Error Log日志是默认开启的其他五种日志都是默认关闭的。下面就带大家一起看看这些日志吧。

三、八种日志的作用

  1. Error Log(错误日志)
    介绍:启动、运行或停止 mysqld时遇到的问题记录的日志。错误日志包含mysqld 启动和关闭次数的记录。它还包含诊断消息,例如服务器启动和关闭期间以及服务器运行期间发生的错误、警告和注释。例如,如果mysqld注意到需要自动检查或修复一个表,它会在错误日志中写入一条消息。
    使用场景:在整个mysql启动或运行出问题时候查看找到原因。
  2. Binary Log(二进制日志)
    **介绍:**这个是我们常说的binglog日志。二进制日志包含描述数据库更改的“事件”,例如表创建操作或表数据更改。它还包含可能已进行更改的语句的事件(例如, DELETE没有匹配行的语句),除非使用基于行的日志记录。二进制日志还包含有关每个语句花费更新数据多长时间的信息。
    使用场景::做主从实现原理就是通过二进制日志,做数据恢复操作需要使用二进制日志。
    注意::biglog有三种文件模式分别是1)STATMENT(默认):每一条会修改数据的sql语句会记录到binlog 2)ROW:记录修改的数据 3)MIXED:一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog
  3. Relay Log(中继日志)
    介绍::主从复制过程中使用的一种日志类型,在从服务器上记录主服务器上所有的二进制日志(Binary log)的信息
    使用场景::查看主从复制的情况。
  4. DDL Log
    介绍:记录DDL操作的一种日志类型。
  5. General Log((查询日志))
    介绍:当客户端连接或断开连接时,服务器将信息写入此日志,并记录从客户端收到的每个 SQL 语句。当您怀疑客户端有错误并想确切地知道客户端发送给mysqld的内容时,通用查询日志可能非常有用。
    使用场景:当遇到一些事务或者有关sql执行情况问题时候可以开启查看。
  6. slow Query Log(慢查询日志)
    **介绍:**慢速查询日志由执行时间超过 long_query_time几秒并且至少 min_examined_row_limit需要检查行的 SQL 语句组成。
    **使用场景:**开启后排查系统执行时间太长的sql。默认是超过十秒的查询哦。
  7. Redo log
    介绍:记录事务过程中的修改操作,以保证事务的安全性
    使用场景:是mysql的acid和mvcc实现重要一环
    注意:有三种刷盘策略innodb_flush_log_at_trx_commit,0-一秒刷新一次,1:提交事务刷新一次,2:事务提交后将数据刷入磁盘

8. Undo log
介绍
:用于撤销与事务相关的修改操作,以保证事务的原子性。
使用场景:是mysql的acid和mvcc实现重要一环

四、使用查看八种日志方式

  1. Error Log(错误日志)
    查看日志位置
# 查看error日志位置
show variables like  'log_error'

查看日志

tail -n 10 /var/log/mysqld.log
 head -n 100 /var/log/mysqld.log

总结:可以看到error.log日志中有一些用户连接信息和启用信息和报错。

mysql 日志查询sql mysql查看日志内容_mysql_02

mysql 日志查询sql mysql查看日志内容_mysql_03

  1. Binary Log(二进制日志)

开启binglog日志
注意:需要在my.cnf配置并重启mysql

vi /mydata/mysql-master/conf/my.cnf
  • my.cnf配置中增加配置
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101 
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能
log-bin=mall-mysql-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
  • 从起mysql后查看binglog状态

其中注意binlog_format为binglog的格式,log_bin为是否开启binglog。

# 查看状态:show
show global variables like '%binlog%';

mysql 日志查询sql mysql查看日志内容_mysql 日志查询sql_04

  • 查看binglog的位置
# 查看位置:
show variables like '%log_bin%';

mysql 日志查询sql mysql查看日志内容_mysql_05


查看binlog

时间过滤 --start-datetime="Y-m-d H:i:s"和–stop-datetime=“Y-m-d H:i:s”

位置过滤 --start-positinotallow=the_position_integer和–stop-positinotallow=the_position_integer

数据库过滤 --database=the_database_name, 或者 -d the_database_name

偏移量 --offset=N, -o N

mysqlbinlog   --start-position=10 /home/data/mysql/mall-mysql-bin.000261
  • 我的binlog读取报错。
  1. Relay Log(中继日志)
    注意:relayLog需要在主从服务器中的从服务器才会有
  • 查看relayLog日志位置
show variables like '%relay_log%'
  • 查看relayLog日志
mysqlbinlog   --stop-position=1000 mall-mysql-relay-bin.000443

mysql 日志查询sql mysql查看日志内容_二进制日志_06

  1. DDL Log(貌似网上找不到)
  2. General Log(查询日志)
    查看状态并开启(默认是关闭的)
# 查看查询日志情况
show variables like '%General_Log%';

mysql 日志查询sql mysql查看日志内容_mysql_07


开启日志

# 开启查询日志
set global general_log=on;

查看日志

tail -n 100 /home/data/mysql/tdengineone.log

总结:可以看到有增删查改的语句,在时间后面的是session号

mysql 日志查询sql mysql查看日志内容_数据库_08


6. slow Query Log(慢查询日志)

查看日志情况并开启

# 查看满查询日志情况
show variables like '%query_log%';
# 开启慢查询日志
set global slow_query_log='ON';

mysql 日志查询sql mysql查看日志内容_mysql 日志查询sql_09


查看日志文件

head -n 100 /home/data/mysql/tdengineone-slow.log

总结:可以看到有用户查询信息还有查询语句和时间

mysql 日志查询sql mysql查看日志内容_mysql 日志查询sql_10

  1. Redo log

介绍:是mysql实现acid种持久性的重要方式,在mysql突然宕机重启后mysql会在磁盘种加载redoLog把没有写入磁盘的数据恢复。

如图:

mysql 日志查询sql mysql查看日志内容_二进制日志_11


因为在进行了修改BufferPool中数据后,将修改记录写入内存中以页形式存储的redoLog中,所以衍生出了redoLog的刷盘策略如下

#查看刷盘策略
show variables  like 'innodb_flush_log_at_trx_commit'
set global innodb_flush_log_at_trx_commit =1
  • 设置为0的时候,表示每次事务提交时不进行刷盘操作
  • 设置为1的时候,表示每次事务提交时都将进行刷盘操作(默认值)
  • 设置为2的时候,表示每次事务提交时都只把redo log buffer内容写入page cache

每条redo记录由“表空间号+数据页号+偏移量+修改数据长度+具体修改的数据”

  1. Undo log

介绍:undoLog是实现acid中原子性,在事务发生错误时候会会对数据进行回滚

在数据页中会记录回滚的索引

mysql 日志查询sql mysql查看日志内容_mysql 日志查询sql_12

五、参考文章

https://zhuanlan.zhihu.com/p/684441867 https://zhuanlan.zhihu.com/p/383824552 https://mysql.net.cn/doc/refman/8.0/en/server-logs.html