7.3 MySQL日志体系
日志类型
事务日志:transaction log
写入类型为“追加”,因此其操作为“顺序IO”,通常被称为:预写式日志;ib_logfile0,ib_logfile1
错误日志:error log
通用日志:general log
慢查询日志:slow query log
二进制日志:binary log
中继日志:relay 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时产生的日志信息。
在主从复制架构中的从服务器上启动从服务器时产生的信息。
错误文件路径:show variables like 'log_error';
设置错误文件警告级别:show variables like 'log_warnings';
log_warings=0|1|2...
通用日志
记录对数据库的通用操作,包括错误的sql语句
通用日志可以保存在:file(默认值)或table(select * from mysql.general_log\G;)
相关设置
general_log=on|off
general_log_file=mysql2.general.log
log_output=table|file|none
查询:show variables like 'general_log';
慢查询日志
记录执行查询时长超过指定时长的操作
相关变量
slow_query_log=on|off
long_query_time=n
slow_query_log_file=hostname-slow.log
log_queries_not_using_indexes=on 不使用索引,不论是否达到慢查询阈值的语句都记录,默认off不记录
查询:show variables like '%query_log%';
工具查询:mysqldumpslow mysql2-slow.log
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了