1. 首页 > MySQL教程 > 正文

MySQL教程FG028-MySQL安装后的监控配置

本文档风哥主要介绍MySQL 8.4安装后的监控配置,包括内置监控工具、日志监控、外部监控工具集成和告警配置等。风哥教程参考MySQL官方文档MySQL Server
Administration等。更多视频教程www.fgedu.net.cn

Part01-基础概念与理论知识

1.1 MySQL监控的重要性

MySQL监控是数据库管理的重要组成部分,通过监控可以及时发现性能问题、预防潜在故障、优化数据库性能、确保服务可用性并满足SLA要求。学习交流加群风哥微信: itpux-com

1.2 MySQL监控维度

MySQL监控主要包括以下几个维度:

  • 服务器状态:CPU、内存、磁盘、网络等系统资源监控
  • MySQL实例:连接数、查询性能、缓存命中率等数据库层面监控
  • 存储引擎:InnoDB缓冲池、日志、锁等存储引擎内部监控
  • 复制状态:复制延迟、错误等复制环境监控

1.3 MySQL内置监控工具

MySQL提供了多种内置监控工具,包括:

  • Performance Schema:提供详细的性能数据
  • sys Schema:基于Performance Schema和INFORMATION_SCHEMA,提供更易于理解的监控视图
  • SHOW STATUS/SHOW VARIABLES:基本的状态和变量查询
  • 各种日志文件:错误日志、慢查询日志、一般查询日志等

Part02-生产环境规划与建议

2.1 监控系统架构规划

在生产环境中,建议采用分层监控架构:

  • 基础设施层:监控服务器硬件和操作系统资源
  • 数据库层:监控MySQL实例、存储引擎和复制状态
  • 应用层:监控应用程序与数据库的交互

2.2 关键监控指标选择

生产环境中需要重点监控的MySQL指标包括:

  • 连接数:Threads_connected、max_connections
  • 查询性能:Slow_queries、Queries
  • 缓冲池:Innodb_buffer_pool_reads、Innodb_buffer_pool_read_requests
  • 复制状态:Seconds_Behind_Master
  • 磁盘空间:Data_free、表空间使用率

2.3 告警阈值设置建议

告警阈值的设置应根据业务特点进行调整,以下是参考建议:

  • 连接数:超过max_connections的80%
  • 慢查询:持续增长或超过历史基线
  • 缓冲池命中率:低于95%
  • 复制延迟:超过300秒
  • 磁盘空间:数据目录使用率超过80%

Part03-生产环境项目实施方案

3.1 内置监控工具配置

3.1.1 Performance Schema配置

Performance Schema是MySQL 5.5引入的监控工具,提供了详细的性能数据。学习交流加群风哥QQ113257174

# 在my.cnf中启用Performance Schema
vi /etc/my.cnf

[mysqld]
performance_schema=ON

# 重启MySQL服务使配置生效
systemctl restart mysqld

# 验证Performance Schema是否启用
mysql -u root -p -e “SHOW VARIABLES LIKE ‘performance_schema’;”
Enter password: Fgedu123!
+——————–+——-+
| Variable_name | Value |
+——————–+——-+
| performance_schema | ON |
+——————–+——-+

3.1.2 常用Performance Schema查询

— 查看当前连接数
SELECT * FROM performance_schema.threads WHERE processlist_id IS NOT NULL;

— 查看语句执行情况(按执行时间排序)
SELECT * FROM performance_schema.events_statements_summary_by_digest ORDER BY sum_timer_wait DESC LIMIT 10;

— 查看表锁情况
SELECT * FROM performance_schema.table_handles;

— 查看InnoDB锁等待
SELECT * FROM performance_schema.data_locks;

3.1.3 sys Schema配置与使用

sys Schema是MySQL 5.7引入的,基于Performance Schema和INFORMATION_SCHEMA,提供了更易于理解的监控视图。

— 查看慢查询(执行时间在95百分位以上的语句)
SELECT * FROM sys.statements_with_runtimes_in_95th_percentile;

— 查看IO热点(按字节数排序)
SELECT * FROM sys.io_global_by_file_by_bytes;

— 查看当前会话情况
SELECT * FROM sys.session;

— 查看索引使用情况
SELECT * FROM sys.schema_unused_indexes;

3.2 日志监控配置

3.2.1 错误日志配置

错误日志记录了MySQL服务器的启动、运行和关闭过程中的错误信息。风哥提示:错误日志是排查MySQL故障的重要依据,建议长期保存。

# 在my.cnf中配置错误日志
vi /etc/my.cnf

[mysqld]
log_error=/mysql/logs/error.log
error_log_verbosity=3 # 0=错误, 1=警告, 2=注意, 3=信息

# 重启MySQL服务使配置生效
systemctl restart mysqld

# 查看错误日志内容
cat /mysql/logs/error.log | tail -50

3.2.2 慢查询日志配置

慢查询日志记录了执行时间超过阈值的SQL语句,是性能优化的重要依据。更多学习教程公众号风哥教程itpux_com

# 在my.cnf中配置慢查询日志
vi /etc/my.cnf

[mysqld]
slow_query_log=ON
slow_query_log_file=/mysql/logs/slow-query.log
long_query_time=2 # 慢查询阈值,单位秒
log_queries_not_using_indexes=ON # 记录未使用索引的查询
log_throttle_queries_not_using_indexes=10 # 每分钟最多记录10条未使用索引的查询

# 重启MySQL服务使配置生效
systemctl restart mysqld

# 验证慢查询日志是否启用
mysql -u root -p -e “SHOW VARIABLES LIKE ‘%slow%’;”
Enter password: Fgedu123!
+—————————+—————————+
| Variable_name | Value |
+—————————+—————————+
| log_slow_admin_statements | OFF |
| log_slow_extra | OFF |
| log_slow_slave_statements | OFF |
| slow_query_log | ON |
| slow_query_log_file | /mysql/logs/slow-query.log |
+—————————+—————————+

3.2.3 一般查询日志配置

一般查询日志记录了所有SQL语句的执行情况,生产环境中建议谨慎启用,因为会产生大量日志。

# 在my.cnf中配置一般查询日志
vi /etc/my.cnf

[mysqld]
general_log=ON
general_log_file=/mysql/logs/general-query.log

# 重启MySQL服务使配置生效
systemctl restart mysqld

# 或者临时启用(不需要重启服务)
mysql -u root -p -e “SET GLOBAL general_log = ‘ON’;”
Enter password: Fgedu123!

3.3 外部监控工具集成

3.3.1 Prometheus + Grafana监控配置

Prometheus是一个开源的监控系统,Grafana是一个数据可视化工具,两者结合可以提供强大的监控解决方案。

# 下载MySQL Exporter
wget
https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz

# 解压
tar -xf mysqld_exporter-0.14.0.linux-amd64.tar.gz
cd mysqld_exporter-0.14.0.linux-amd64

# 创建MySQL用户用于监控
mysql -u root -p -e “CREATE USER ‘exporter’@’localhost’ IDENTIFIED BY ‘Fgedu123!’ WITH MAX_USER_CONNECTIONS
3;”
mysql -u root -p -e “GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO ‘exporter’@’localhost’;”
Enter password: Fgedu123!

# 创建配置文件
cat > .my.cnf << EOF [client] user=exporter password=Fgedu123! EOF # 运行MySQL Exporter(可以配置为系统服务) ./mysqld_exporter --config.my-cnf=.my.cnf & # 验证Exporter是否运行 curl http://localhost:9104/metrics

# 配置Prometheus(prometheus.yml)
vi /etc/prometheus/prometheus.yml

scrape_configs:
– job_name: ‘mysql’
static_configs:
– targets: [‘localhost:9104’]
labels:
instance: ‘fgedudb’

# 重启Prometheus服务
systemctl restart prometheus

# 配置Grafana:导入MySQL模板(ID: 7362)

3.3.2 Percona Monitoring and Management (PMM)配置

PMM是Percona提供的开源监控工具,专为MySQL和MongoDB设计,提供了丰富的监控指标和可视化界面。

# 安装PMM Server(使用Docker)
docker run -d \
–name pmm-server \
-p 80:80 \
-p 443:443 \
-v /opt/pmm-data:/srv \
percona/pmm-server:2

# 安装PMM Client
yum install pmm2-client

# 连接PMM Client到PMM Server
pmm-admin config –server-url=https://admin:admin@localhost –server-insecure-tls

# 注册MySQL实例
pmm-admin add mysql –username=root –password=Fgedu123! –query-source=perfschema fgedudb

Part04-生产案例与实战讲解

4.1 MySQL监控脚本开发

以下是一个生产环境中常用的MySQL监控脚本示例,可以定期检查MySQL的关键指标并发送告警。

#!/bin/bash
# mysql_monitor.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn

# MySQL连接信息
HOST=”localhost”
USER=”root”
PASSWORD=”Fgedu123!”
ALERT_EMAIL=”admin@fgedu.net.cn”

# 检查连接数
CONNECTIONS=$(mysql -h $HOST -u $USER -p$PASSWORD -e “SHOW GLOBAL STATUS LIKE ‘Threads_connected’;”
| grep Threads_connected | awk ‘{print $2}’)
MAX_CONNECTIONS=$(mysql -h $HOST -u $USER -p$PASSWORD -e “SHOW VARIABLES LIKE ‘max_connections’;” |
grep max_connections | awk ‘{print $2}’)

# 计算连接百分比
PERCENTAGE=$(( $CONNECTIONS * 100 / $MAX_CONNECTIONS ))

if [ $PERCENTAGE -gt 80 ]; then
ALERT_MESSAGE=”警告:MySQL连接数使用率超过80%,当前连接数: $CONNECTIONS,最大连接数: $MAX_CONNECTIONS”
echo “$ALERT_MESSAGE” | mail -s “MySQL告警” $ALERT_EMAIL
fi

# 检查慢查询
SLOW_QUERIES=$(mysql -h $HOST -u $USER -p$PASSWORD -e “SHOW GLOBAL STATUS LIKE ‘Slow_queries’;” |
grep Slow_queries | awk ‘{print $2}’)
echo “当前慢查询数量: $SLOW_QUERIES”

# 检查缓冲池命中率
BUFFER_POOL_READS=$(mysql -h $HOST -u $USER -p$PASSWORD -e “SHOW GLOBAL STATUS LIKE
‘Innodb_buffer_pool_reads’;” | grep Innodb_buffer_pool_reads | awk ‘{print $2}’)
BUFFER_POOL_READ_REQUESTS=$(mysql -h $HOST -u $USER -p$PASSWORD -e “SHOW GLOBAL STATUS LIKE
‘Innodb_buffer_pool_read_requests’;” | grep Innodb_buffer_pool_read_requests | awk ‘{print $2}’)

if [ $BUFFER_POOL_READ_REQUESTS -gt 0 ]; then
HIT_RATE=$(( ($BUFFER_POOL_READ_REQUESTS – $BUFFER_POOL_READS) * 100 / $BUFFER_POOL_READ_REQUESTS ))
echo “缓冲池命中率: $HIT_RATE%”

if [ $HIT_RATE -lt 95 ]; then
ALERT_MESSAGE=”警告:MySQL缓冲池命中率低于95%,当前命中率: $HIT_RATE%”
echo “$ALERT_MESSAGE” | mail -s “MySQL告警” $ALERT_EMAIL
fi
fi

# 检查复制状态(如果是从库)
SLAVE_IO_RUNNING=$(mysql -h $HOST -u $USER -p$PASSWORD -e “SHOW SLAVE STATUS\G” | grep
Slave_IO_Running | awk ‘{print $2}’)
SLAVE_SQL_RUNNING=$(mysql -h $HOST -u $USER -p$PASSWORD -e “SHOW SLAVE STATUS\G” | grep
Slave_SQL_Running | awk ‘{print $2}’)

if [ “$SLAVE_IO_RUNNING” = “No” ] || [ “$SLAVE_SQL_RUNNING” = “No” ]; then
ALERT_MESSAGE=”警告:MySQL复制异常,Slave_IO_Running: $SLAVE_IO_RUNNING, Slave_SQL_Running:
$SLAVE_SQL_RUNNING”
echo “$ALERT_MESSAGE” | mail -s “MySQL告警” $ALERT_EMAIL
fi

4.2 Prometheus+Grafana监控部署

以下是在生产环境中完整部署Prometheus+Grafana监控MySQL的步骤。

# 1. 安装Prometheus
wget
https://github.com/prometheus/prometheus/releases/download/v2.40.0/prometheus-2.40.0.linux-amd64.tar.gz
tar -xf prometheus-2.40.0.linux-amd64.tar.gz
cd prometheus-2.40.0.linux-amd64

# 2. 安装Grafana
yum install -y https://dl.grafana.com/oss/release/grafana-9.0.0-1.x86_64.rpm
systemctl start grafana-server
systemctl enable grafana-server

# 3. 配置Prometheus(添加MySQL监控)
vi prometheus.yml
scrape_configs:
– job_name: ‘mysql’
static_configs:
– targets: [‘localhost:9104’]

# 4. 启动所有服务
./prometheus –config.file=prometheus.yml &

# 5. 访问Grafana并配置MySQL监控
# 访问地址:http://localhost:3000
# 默认用户名/密码:admin/admin
# 导入MySQL模板(ID: 7362)

4.3 告警配置实战

配置MySQL服务器发送邮件告警和Prometheus Alertmanager告警。

# 1. 配置邮件告警
# 安装mailx
yum install mailx -y

# 配置SMTP
vi /etc/mail.rc
set from=alert@fgedu.net.cn
set smtp=smtp.fgedu.net.cn
set smtp-auth-user=alert@fgedu.net.cn
set smtp-auth-password=Fgedu123!
set smtp-auth=login

# 创建告警脚本
cat > /usr/local/bin/mysql_alert.sh << 'EOF' #!/bin/bash SUBJECT="MySQL告警" RECIPIENT="admin@fgedu.net.cn" MESSAGE="$1" echo "$MESSAGE" | mail -s "$SUBJECT" $RECIPIENT EOF chmod +x /usr/local/bin/mysql_alert.sh

# 2. 配置Prometheus Alertmanager
# 下载Alertmanager
wget
https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz
tar -xf alertmanager-0.25.0.linux-amd64.tar.gz

# 配置Alertmanager
vi alertmanager.yml
global:
smtp_smarthost: ‘smtp.fgedu.net.cn:587’
smtp_from: ‘alert@fgedu.net.cn’
smtp_auth_username: ‘alert@fgedu.net.cn’
smtp_auth_password: ‘Fgedu123!’

route:
group_by: [‘alertname’]
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receiver: ’email’

receivers:
– name: ’email’
email_configs:
– to: ‘admin@fgedu.net.cn’
send_resolved: true

# 创建告警规则
vi /etc/prometheus/alert.rules
groups:
– name: mysql_alerts
rules:
– alert: MySQLHighConnectionCount
expr: mysql_global_status_threads_connected / mysql_global_variables_max_connections * 100 >
80
for: 5m
labels:
severity: warning
annotations:
summary: “MySQL连接数过高”
description: “MySQL连接数使用率已超过80%”

# 启动Alertmanager
./alertmanager –config.file=alertmanager.yml &

Part05-风哥经验总结与分享

5.1 监控最佳实践

基于多年的MySQL运维经验,以下是MySQL监控的最佳实践建议:

  • 分层监控:从服务器硬件、操作系统到数据库层面进行全面监控
  • 重点关注:连接数、慢查询、缓冲池命中率、复制状态等关键指标
  • 阈值合理:根据业务特点设置合理的告警阈值,避免误告警
  • 趋势分析:关注指标的变化趋势,而不仅仅是当前值
  • 定期审查:每季度审查一次监控配置和告警规则,根据业务变化进行调整
  • 日志管理:合理配置日志保留策略,定期归档和清理日志
  • 自动化运维:使用自动化脚本和工具进行监控和告警,提高效率

5.2 常见问题与解决方案

在MySQL监控过程中,经常会遇到以下问题:

  • 连接数过高:可能是应用程序连接未释放或连接池配置不合理,需要检查应用程序代码和连接池配置,必要时增加max_connections
  • 慢查询增加:可能是缺少索引或查询计划不合理,需要分析慢查询日志,优化SQL语句和索引
  • 缓冲池命中率低:可能是缓冲池大小不足或数据访问模式不合理,需要增加innodb_buffer_pool_size或优化数据访问
  • 复制延迟:可能是网络延迟、主库写入量大或从库配置不足,需要优化网络、增加从库配置或使用并行复制
  • 监控数据过多:可能是监控频率过高或监控指标过多,需要调整监控频率和监控指标
生产环境建议:监控系统的部署应考虑高可用性,避免监控系统本身成为单点故障。同时,监控数据应定期备份,以便进行历史分析和趋势预测。

风哥提示:MySQL监控是一个持续优化的过程,需要根据业务发展和系统变化不断调整监控策略。建议建立完善的监控体系,包括实时监控、历史数据分析和智能告警,以确保数据库系统的稳定运行。from
MySQL:www.itpux.com

GF-MySQL数据库培训文档系列

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息