7.3 MySQL 日志体系

MySQL支持丰富的日志类型,如下:

  • 事务日志:transaction log

    事务日志的写入类型为“追加”,因此其操作为“顺序IO”;通常也被称为:预写式日志

      ib_logfile0,ib_logfile1

  • 错误日志:error log
  • 通用日志:general log
  • 慢查询日志:slow query log
  • 二进制日志:binary log
  • 中继日志:relay log,在主从复制架构中,从服务器用于报错从主服务器的二进制日志中读取的事件

事务日志

  事务日志:transaction log

  事务型存储引擎自行管理和使用,建议和数据文件分开存放,redo log和undo log

Innodb事务日志相关配置

 show variables like '%innodb_log%'; 

innodb_log_file_size              50331648   每个日志文件大小
innodb_log_files_in_group         2          日志组成员个数
innodb_log_group_home_dir         ./         事务文件路径
innodb_flush_log_at_trx_commit               默认1

  事务日志性能优化

innodb_flush_log_at_trx_commit 0|1|2
0:每秒write os cache &flush 到 磁盘
  事务提交时没有写磁盘操作,而是每秒执行一次将日志缓冲区的提交的事务写入刷新到磁盘(这样可提供更好的性能,但服务器崩溃可能丢失最后一秒的事务)
1:默认值,每次事务提交write os cache & flush到磁盘
  日志缓冲区将下入日志文件,并在每次事务后执行刷新到磁盘。完全遵守ACID特性
2:每次事务提交write os cache 每秒flush到磁盘
  每次提交都会写入os缓冲区,但每秒才会进行一次刷新到磁盘(性能比0略差,但操作系统或停电可能导致最后一秒的交易丢失)

  高并发业务行业最佳时间,是使用第三种这种配置(=2)

1.配置为2和0,性能差异并不大,因为将数据从log buffer拷贝到os cache,虽然跨越用户态与内核态,但因为是内存的数据拷贝,速度很快
2.配置为2和0,安全性差异很大,操作系统崩溃的概率相比mysql应用程序崩溃的概率,小很多,设置为2,只要操作系统不崩溃也绝对不会丢数据

错误日志

错误日志概述

  • mysqld启动和关闭过程中输出的事件信息
  • mysqld运行中产生的错误信息
  • 计划任务(事件调度器) Event Scheduler 运行一个event时产生的日志信息
  • 在主从复制架构中的从服务器上启动从服务器线程时产生的信息

错误文件路径

mysql> show variables like 'log_error';
+---------------+---------------------+
| Variable_name | Value               |
+---------------+---------------------+
| log_error     | /var/log/mysqld.log |
+---------------+---------------------+

设置错误文件警告级别

mysql> show variables like 'log_warnings';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_warnings  | 2     |
+---------------+-------+
1 row in set (0.00 sec)

  log_warnings=0|1|2|3...


 

通用日志

通用日志概述 

  记录对数据库的通用操作,包括错误的sql语句

  通用日志可以保存在:file(默认值)或table(select * from mysql.general_log\G;)

通用日志相关设置

general_log=on|off
general_log_file=mysql2.general.log
log_output=table|file|none
mysql> show variables like 'general_log';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| general_log   | OFF   |
+---------------+-------+
1 row in set (0.00 sec)

慢查询日志

慢查询日志概述:

  记录执行查询时长超过指定时长的操作

慢查询相关变量

slow_query_log=on|off
long_query_time=n
slow_query_log_file=hostname-slow.log
log_queries_not_using_indexes=on
不使用索引,不论是否达到慢查询阈值的语句都记录日志,默认off不记录
mysql> show variables like '%query_log%';
+------------------------------+-------------------------------+
| Variable_name                | Value                         |
+------------------------------+-------------------------------+
| binlog_rows_query_log_events | OFF                           |
| slow_query_log               | OFF                           |
| slow_query_log_file          | /var/lib/mysql/mysql-slow.log |
+------------------------------+-------------------------------+
3 rows in set (0.00 sec)
/usr/sbin/mysqld, Version: 5.7.17-log (MySQL Community Server (GPL)). started with:
Tcp port: 0  Unix socket: /var/lib/mysql/mysql.sock
Time                 Id Command    Argument
# Time: 2021-06-11T11:20:52.748966Z
# User@Host: root[root] @ localhost []  Id:     3
# Query_time: 0.000119  Lock_time: 0.000072 Rows_sent: 1  Rows_examined: 1
use max123;
SET timestamp=1623410452;
select * from aa;

如何使用工具查询:

[root@mysql mysql]# mysqldumpslow mysql2-slow.log 

Reading mysql slow query log from mysql2-slow.log
Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows=0.0 (0), 0users@0hosts
  # Time: N-N-11T11:N:N.748966Z
  # User@Host: root[root] @ localhost []  Id:     N
  # Query_time: N.N  Lock_time: N.N Rows_sent: N  Rows_examined: N
  use max123;
  SET timestamp=N;
  select * from aa

详解 慢查询 之 mysqldumpslow


二进制日志

  

 

posted @ 2021-06-11 11:30  huakai201  阅读(103)  评论(0)    收藏  举报