MySQL 监控主要通过日志文件、状态变量、性能模式(Performance Schema)、sys 模式及企业版专属工具实现,可覆盖服务器运行状态、查询性能、用户活动等全维度监控需求。
监控核心目标
- 配置并查看各类 MySQL 日志文件,定位异常与性能问题
- 识别慢查询,优化 SQL 执行效率
- 配置企业版审计功能,记录并审计数据库活动
- 通过系统变量实时监控数据库运行状态
- 借助专业工具(性能模式、企业级监控器)实现深度性能分析
日志文件监控(核心监控方式)
MySQL 通过多种日志记录服务器活动,是问题排查与性能分析的基础。
常见日志类型及详情
错误日志(Error Log)
- 默认启用,无需手动开启
- 记录内容:服务器启动 / 关闭过程、运行期间的错误、警告、提示等诊断信息
- 架构(MySQL 8.0+):采用组件化设计,包含过滤组件和接收器组件
- 过滤组件:log_filter_internal(默认,按优先级和错误码过滤)、log_filter_dragnet(按用户规则过滤)
- 接收器组件:log_sink_internal(默认,写入文件 / 控制台)、log_sink_json(JSON 格式输出)、log_sink_syseventlog(写入系统日志)
- 配置方式:通过
log_error_services变量指定组件组合,例:log_filter_internal; log_sink_internal; log_sink_json
二进制日志(Binary Log)
- 记录内容:数据变更、表结构变更及对应时间戳
- 启用状态:MySQL 8.0 + 默认启用,可通过
log_bin=OFF关闭 - 核心用途:时间点恢复、数据备份恢复、主从复制
- 日志轮转触发条件:服务器重启、达到
max_binlog_size阈值、执行FLUSH LOGS/FLUSH BINARY LOGS - 查看方式:
- 元数据:
SHOW BINARY LOGS、SHOW MASTER STATUS - 日志内容:
SHOW BINLOG EVENTS语句、mysqlbinlog客户端工具
- 元数据:
- 日志清除:
- 自动清除:通过
binlog_expire_logs_seconds(秒级)或expire_logs_days(天级,默认 30 天)设置过期时间 - 手动清除:
PURGE BINARY LOGS TO '日志名'(清除到指定日志前)、PURGE BINARY LOGS BEFORE '时间'(清除指定时间前) - 复制环境注意:避免日志被误删,可加
NO_WRITE_TO_BINLOG(别名LOCAL)防止FLUSH命令同步到从库
- 自动清除:通过
常规查询日志(General Query Log)
- 启用方式:设置
general_log=ON - 记录内容:客户端连接信息(时间、类型、进程 ID)、所有执行的 SQL 语句(不含从库行级复制更新)
- 特点:增长速度极快、系统开销大
- 使用建议:仅在需要短期抓取全量活动时启用,生产环境避免长期开启
慢查询日志(Slow Query Log)
- 启用方式:设置
slow_query_log=ON - 记录内容:执行时间超过阈值的 SQL 语句(默认 10 秒)
- 关键配置:
- 调整阈值:通过
long_query_time设置(支持微秒精度,例:0.03代表 30 毫秒) - 记录无索引查询:设置
log_queries_not_using_indexes=ON(即使执行时间未达阈值) - 记录管理语句:设置
log_slow_admin_statements=ON(默认不记录) - 记录复制语句:设置
log_slow_slave_statements=ON(默认不记录从库复制语句) - 额外统计信息:开启
log_slow_extra(记录扫描行数、临时表使用等,仅对文件输出有效)
- 调整阈值:通过
- 查看方式:
- 直接查看文本文件(默认存储在数据目录)
- 汇总分析:
mysqldumpslow工具(分组相似查询、替换参数为N/'s',支持排序和过滤)
- 过滤配置:
min_examined_row_limit:仅记录扫描行数达到该值的语句log_throttle_queries_not_using_indexes:60 秒内最多记录的无索引查询数(默认 0,记录所有)
审计日志(Audit Log)
- 专属特性:仅 MySQL 企业版提供
- 功能:基于规则监控、记录、阻断客户端连接和查询活动
- 记录内容:错误记录、连接 / 断开时间、执行操作、访问的库表等(取决于过滤规则)
- 格式:支持 XML(NEW/OLD 风格)、JSON(支持书签和读取函数)
日志输出与轮转
输出目标配置(log_output变量)
- 可选值:
FILE(默认,写入文件)、TABLE(写入系统表)、NONE(不输出) - 文件路径:通过
slow_query_log_file(慢查询日志)、general_log_file(常规查询日志)指定,默认存储在数据目录 - 表存储:常规查询日志写入
mysql.general_log,慢查询日志写入mysql.slow_log
日志轮转(避免文件过大)
- 核心操作:备份旧日志后执行
FLUSH LOGS(或mysqladmin flush-logs),强制服务器生成新日志文件 - 单独轮转指定日志:
FLUSH BINARY LOGS/FLUSH ERROR LOGS/FLUSH GENERAL LOGS/FLUSH SLOW LOGS - 自动轮转:使用
mysql-log-rotate脚本或自定义脚本,定期执行轮转操作 - 注意事项:二进制日志用于复制时,需谨慎备份后再删除旧日志
日志文件共性特点
- 存储方式:可写入文件或表(仅常规 / 慢查询日志支持表存储)
- 加密支持:仅审计日志和二进制日志可加密
- 格式:除二进制日志外,其余均为文本格式(可直接查看)
- 注意事项:会占用大量磁盘空间,需定期清理或归档
状态变量监控(实时状态查询)
状态变量基础
- 作用:记录服务器运行状态的计数器或指标值,反映数据库活动情况
- 查看方式:
SHOW [GLOBAL | SESSION] STATUS(未指定作用域默认SESSION) - 作用域说明:
GLOBAL:聚合所有连接的状态(例:com_select记录所有连接的查询总数)SESSION:仅当前连接的状态(例:com_select记录当前连接的查询数)
- 补充查询方式:通过
performance_schema的global_status/session_status表查询,例:SELECT * FROM performance_schema.session_status
常用工具:mysqladmin
- 查看简要状态:
mysqladmin status(输出慢查询数、打开表数、每秒查询数等) - 查看详细变量:
mysqladmin extended-status(等同于SHOW GLOBAL STATUS) - 清除状态值:
mysqladmin flush-status - 查看活跃线程:
mysqladmin processlist --verbose(等同于SHOW FULL PROCESSLIST) - 实时监控:
mysqladmin extended -i100 --relative(每 100 秒输出变量变化差值)
性能模式监控(深度性能分析)
性能模式(Performance Schema)基础
- 本质:一组内存表,通过
PERFORMANCE_SCHEMA存储引擎实现 - 作用:跟踪服务器性能指标,深入分析查询执行、I/O 等待、线程活动等
- 可用性:Oracle 二进制发行版默认启用,其他版本需编译时配置支持
- 启用 / 禁用:通过
performance_schema变量启动服务器(例:--performance_schema=ON)
性能模式表分组
- 配置表(Setup):
setup_actors(监控客户端连接)、setup_objects(监控数据库对象)、setup_instruments(配置收集的指标)等 - 当前事件表(Current Events):存储最新监控到的事件(例:
events_waits_current) - 历史表(History):存储历史事件数据
- 汇总表(Summary):聚合事件信息,便于分析(例:
events_waits_summary_global_by_event_name) - 实例表(Instance):定义被监控的对象类型
- 其他表(Miscellaneous):不归属以上类别的表
核心配置:工具(Instruments)
- 定义:对应服务器源代码中的检测点,用于收集特定性能数据
- 名称格式:由
/分隔的层级组件(例:wait/io/file/myisam/log、stage/sql/Sorting result) - 顶层组件:
idle(空闲事件)、error(错误事件)、memory(内存事件)、stage(阶段事件)、statement(语句事件)、transaction(事务事件)、wait(等待事件)
指标访问方式
- 直接查询性能模式表,语法与普通表一致,例:
SELECT * FROM events_waits_current\G
sys 模式(简化性能分析)
核心作用
- 解决性能模式表复杂、难理解的问题,为数据库管理员(DBAs)提供简化的诊断工具
- 基于性能模式数据,提供易读的视图、存储过程和函数
核心组件
- 视图(Views):汇总性能模式数据(例:
user_summary查看用户资源消耗、user_summary_by_statement_type查看用户语句类型统计) - 存储过程(Stored Procedures):协助配置性能模式、生成诊断报告
- 存储函数(Stored Functions):查询配置并格式化输出结果
实用示例
- 查看资源消耗最高的用户:
USE sys; SELECT * FROM user_summary\G - 查看使用磁盘临时表的语句:查询
sys模式相关视图(如statements_with_temp_tables)
MySQL 企业版专属监控工具
企业审计(MySQL Enterprise Audit)
安装与卸载
- 安装:执行安装脚本(Windows:
audit_log_filter_win_install.sql;Linux:audit_log_filter_linux_install.sql) - 卸载:删除相关表、插件和函数(例:
DROP TABLE mysql.audit_log_filter; UNINSTALL PLUGIN audit_log;)
核心配置
- 启用插件:
audit_log=FORCE_PLUS_PERMANENT(防止运行时卸载) - 日志路径:通过
audit_log_file指定,默认存储在数据目录(文件名audit.log) - 日志轮转:设置
audit_log_rotate_on_size(达到指定大小后轮转) - 写入策略:
audit_log_strategy(可选SYNCHRONOUS/SEMISYNCHRONOUS/ASYNCHRONOUS/PERFORMANCE) - 过滤规则配置:
- 定义过滤器:
audit_log_filter_set_filter('过滤器名', '{"filter":{"log":true}}')(JSON 格式规则) - 分配给用户:
audit_log_filter_set_user('用户名@主机', '过滤器名')(&表示所有未指定过滤器的用户)
- 定义过滤器:
审计记录详情
- 时间戳:UTC 格式
- 事件类型:
Connect(登录)、Quit(断开)、Query(执行 SQL)等 - 状态值(STATUS):与
SHOW ERRORS的Code值一致 - 专属字段:
Connect事件包含HOST/IP/USER,Query事件包含SQLTEXT(SQL 语句)
企业级监控器(MySQL Enterprise Monitor)
- 定位:MySQL 企业版核心组件,专业可视化监控工具
- 核心功能:
- 持续监控:支持多服务器、复制环境、云实例
- 自动告警:异常时及时通知
- 顾问功能(Advisors):提供优化建议
- 可视化分析:查询性能图表、资源消耗展示
- 账户管理:统一管理数据库账户
监控关键场景与最佳实践
- 慢查询优化:开启慢查询日志,用
mysqldumpslow分析高频慢查询,优先优化无索引查询 - 故障排查:优先查看错误日志,定位启动 / 运行异常;结合二进制日志进行数据恢复
- 安全审计:企业版启用审计日志,监控敏感账户的连接和操作
- 性能监控:通过
performance_schema跟踪 I/O 等待、线程活动,用sys模式简化分析 - 日志管理:定期轮转日志,避免磁盘占满;重要日志(审计 / 二进制)加密存储,限制访问权限