MySQL-04-监控

MySQL 监控主要通过日志文件、状态变量、性能模式(Performance Schema)、sys 模式及企业版专属工具实现,可覆盖服务器运行状态、查询性能、用户活动等全维度监控需求。

监控核心目标

  1. 配置并查看各类 MySQL 日志文件,定位异常性能问题
  2. 识别慢查询优化 SQL 执行效率
  3. 配置企业版审计功能,记录并审计数据库活动
  4. 通过系统变量实时监控数据库运行状态
  5. 借助专业工具(性能模式、企业级监控器)实现深度性能分析

日志文件监控(核心监控方式)

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 LOGSSHOW 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_schemaglobal_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/logstage/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
  • 过滤规则配置:
    1. 定义过滤器:audit_log_filter_set_filter('过滤器名', '{"filter":{"log":true}}')(JSON 格式规则)
    2. 分配给用户:audit_log_filter_set_user('用户名@主机', '过滤器名')&表示所有未指定过滤器的用户)

审计记录详情

  • 时间戳:UTC 格式
  • 事件类型:Connect(登录)、Quit(断开)、Query(执行 SQL)等
  • 状态值(STATUS):与SHOW ERRORSCode值一致
  • 专属字段:Connect事件包含HOST/IP/USERQuery事件包含SQLTEXT(SQL 语句)

企业级监控器(MySQL Enterprise Monitor)

  • 定位:MySQL 企业版核心组件,专业可视化监控工具
  • 核心功能:
    • 持续监控:支持多服务器、复制环境、云实例
    • 自动告警:异常时及时通知
    • 顾问功能(Advisors):提供优化建议
    • 可视化分析:查询性能图表、资源消耗展示
    • 账户管理:统一管理数据库账户

监控关键场景与最佳实践

  1. 慢查询优化:开启慢查询日志,用mysqldumpslow分析高频慢查询,优先优化无索引查询
  2. 故障排查:优先查看错误日志,定位启动 / 运行异常;结合二进制日志进行数据恢复
  3. 安全审计:企业版启用审计日志,监控敏感账户的连接和操作
  4. 性能监控:通过performance_schema跟踪 I/O 等待、线程活动,用sys模式简化分析
  5. 日志管理:定期轮转日志,避免磁盘占满;重要日志(审计 / 二进制)加密存储,限制访问权限
0 次浏览