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
二进制日志
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号