1. 首页 > MySQL教程 > 正文

MySQL教程FG282-MySQL监控优化

内容简介:本文主要介绍MySQL存储过程参数与返回值的相关知识,包括参数类型、使用方法和最佳实践等内容。风哥教程参考MySQL官方文档MySQL Monitoring、MySQL Server Administration。

Part01-基础概念与理论知识

1.1 监控的重要性

MySQL监控是数据库运维的核心组成部分,通过监控可以及时发现问题、优化性能、确保系统稳定运行。

1.2 监控类型

MySQL监控主要包括以下类型: 01 更多视频教程www.fgedu.net.cn

# 监控类型

1. 性能监控
– 查询执行时间
– 连接数
– 缓冲区使用情况
– 锁等待

2. 状态监控
– 服务器状态
– 存储引擎状态
– 复制状态

3. 安全监控
– 权限变更
– 异常访问
– 审计日志

4. 资源监控
– CPU使用率
– 内存使用
– 磁盘I/O
– 网络流量

Part02-生产环境规划与建议

2.1 Performance Schema

Performance Schema是MySQL 5.5引入的性能监控工具,可以监控服务器的各种性能指标。 02 学习交流加群风哥微信: itpux-com

# Performance Schema配置

1. 检查Performance Schema状态
mysql> SHOW VARIABLES LIKE ‘performance_schema’;

输出示例:
+——————–+——-+
| Variable_name | Value |
+——————–+——-+
| performance_schema | ON |
+——————–+——-+

2. 查看Performance Schema表
mysql> SHOW TABLES FROM performance_schema;

输出示例:
+———————————————-+
| Tables_in_performance_schema |
+———————————————-+
| accounts |
| events_stages_current |
| events_stages_history |
| events_stages_history_long |
| events_statements_current |
| events_statements_history |
| events_statements_history_long |
| events_transactions_current |
| events_transactions_history |
| events_transactions_history_long |
| events_waits_current |
| events_waits_history |
| events_waits_history_long |
| file_instances |
| file_summary_by_event_name |
| file_summary_by_instance |
| mutex_instances |
| performance_timers |
| rwlock_instances |
| setup_consumers |
| setup_instruments |
| setup_timers |
| socket_instances |
| socket_summary_by_event_name |
| socket_summary_by_instance |
| status_by_account |
| status_by_host |
| status_by_thread |
| status_by_user |
| variables_by_thread |
+———————————————-+

2.2 Sys Schema

Sys Schema是MySQL 5.7引入的系统视图集合,提供了更友好的监控信息。 03 学习交流加群风哥QQ113257174

# Sys Schema使用

1. 查看慢查询
mysql> SELECT * FROM sys.statements_with_runtimes_in_95th_percentile

输出示例:
+————————————–+——+——————+——————+——————+——————+——————+—————-+————————+————————+—————————-+
| query | db | full_scan | exec_count | err_count | warn_count | total_latency | max_latency | avg_latency | lock_latency | rows_sent |
+————————————–+——+——————+——————+——————+——————+——————+—————-+————————+————————+—————————-+
| SELECT * FROM employees WHERE salary > ? | test | 1 | 1000 | 0 | 0 | 10.00 s | 1.00 s | 10.00 ms | 1.00 s | 1000 |
+————————————–+——+——————+——————+——————+——————+——————+—————-+————————+————————+—————————-+

2. 查看表空间使用情况
mysql> SELECT * FROM sys.schema_table_statistics_with_buffer

输出示例:
+—————+————+————+————+————–+——————+——————+—————-+—————+
| table_schema | table_name | rows | avg_row_len| data_length | index_length | total_length | buffer_size | rows_changed |
+—————+————+————+————+————–+——————+——————+—————-+—————+
| test | employees | 1000000 | 100 | 100000000 | 50000000 | 150000000 | 10000000 | 10000 |
+—————+————+————+————+————–+——————+——————+—————-+—————+

2.3 Prometheus + Grafana

Prometheus和Grafana是常用的监控组合,可以实现MySQL的可视化监控。

# Prometheus + Grafana配置

1. 安装mysqld_exporter
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz
tar -xzf mysqld_exporter-0.14.0.linux-amd64.tar.gz
cd mysqld_exporter-0.14.0.linux-amd64

2. 创建MySQL用户
mysql> CREATE USER ‘exporter’@’localhost’ IDENTIFIED BY ‘password’ WITH MAX_USER_CONNECTIONS 3;
mysql> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO ‘exporter’@’localhost’;

3. 创建配置文件
cat > .my.cnf << EOF
[client]
user=exporter
password=password
host=localhost
EOF

4. 启动exporter
./mysqld_exporter –config.my-cnf=.my.cnf &

5. 配置Prometheus
cat >> prometheus.yml << EOF
– job_name: ‘mysql’
static_configs:
– targets: [‘localhost:9104’]
labels:
instance: mysql-server
EOF

6. 启动Prometheus
./prometheus –config.file=prometheus.yml &

7. 启动Grafana
systemctl start grafana-server

8. 导入MySQL dashboard
# 在Grafana中导入ID为7362的MySQL dashboard

2.4 Zabbix监控

Zabbix是一个企业级的监控解决方案,支持MySQL的全面监控。 04 风哥提示:

# Zabbix配置

1. 安装Zabbix agent
apt-get install zabbix-agent

2. 配置MySQL监控
cat > /etc/zabbix/zabbix_agentd.d/mysql.conf << EOF
UserParameter=mysql.ping,mysqladmin -u zabbix -p password ping | grep -c alive
UserParameter=mysql.version,mysql -V
UserParameter=mysql.questions,mysqladmin -u zabbix -p password extended-status | grep -E “Questions” | cut -d”:” -f2
UserParameter=mysql.slowqueries,mysqladmin -u zabbix -p password extended-status | grep -E “Slow_queries” | cut -d”:” -f2
UserParameter=mysql.uptime,mysqladmin -u zabbix -p password status | grep -E “Uptime” | cut -d”:” -f2 | cut -d” ” -f1
EOF

3. 重启Zabbix agent
systemctl restart zabbix-agent

4. 在Zabbix web界面中添加MySQL主机和监控项

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

3.1 关键监控指标

监控MySQL时需要关注以下关键指标: 05更多学习教程公众号风哥教程itpux_com

# 关键监控指标

1. 连接指标
– 活跃连接数
– 连接使用率
– 连接错误率

2. 查询指标
– QPS (Queries Per Second)
– TPS (Transactions Per Second)
– 慢查询数
– 全表扫描数

3. 缓存指标
– 缓冲池命中率
– 键缓冲区命中率
– 查询缓存命中率

4. 锁指标
– 锁等待时间
– 死锁数
– 锁争用率

5. 复制指标
– 复制延迟
– 复制错误
– 复制状态

6. 资源指标
– CPU使用率
– 内存使用
– 磁盘I/O
– 网络流量

3.2 监控告警

设置合理的监控告警阈值,及时发现和处理问题:

# 监控告警配置

1. Prometheus告警规则
cat > mysql-alerts.yml << EOF
groups:
– name: mysql_alerts
rules:
– alert: MySQLDown
expr: mysql_up == 0
for: 5m
labels:
severity: critical
annotations:
summary: “MySQL down”
description: “MySQL instance {{ $labels.instance }} is down”

– alert: MySQLHighConnections
expr: mysql_global_status_threads_connected > 80
for: 5m
labels:
severity: warning
annotations:
summary: “MySQL high connections”
description: “MySQL instance {{ $labels.instance }} has {{ $value }} connections”

– alert: MySQLSlowQueries
expr: increase(mysql_global_status_slow_queries[5m]) > 10
for: 5m
labels:
severity: warning
annotations:
summary: “MySQL slow queries”
description: “MySQL instance {{ $labels.instance }} has {{ $value }} slow queries”
EOF

2. Zabbix告警配置
# 在Zabbix web界面中设置告警触发器
# 例如:连接数 > 80% 最大连接数,持续5分钟触发告警

3.3 监控维护

定期维护监控系统,确保监控的有效性:

# 监控维护

1. 定期检查监控数据
– 确认监控数据的准确性
– 分析监控趋势
– 调整监控阈值

2. 优化监控频率
– 关键指标:10-30秒
– 一般指标:1-5分钟
– 非关键指标:10-15分钟

3. 监控数据管理
– 设置数据保留策略
– 定期备份监控数据
– 清理过期监控数据

4. 监控系统高可用
– 部署监控系统集群
– 配置监控系统告警
– 定期测试监控系统

Part04-生产案例与实战讲解

4.1 性能问题诊断

通过监控发现并解决性能问题: 06 from mysql视频:www.itpux.com

# 性能问题诊断

1. 发现问题
– 通过Grafana监控面板发现QPS突然下降
– 慢查询数急剧增加

2. 分析问题
– 查看慢查询日志
mysql> SHOW VARIABLES LIKE ‘slow_query_log%’;
+———————+———————————-+
| Variable_name | Value |
+———————+———————————-+
| slow_query_log | ON |
| slow_query_log_file | /var/log/mysql/mysql-slow.log |
+———————+———————————-+

– 分析慢查询
mysql> SELECT * FROM performance_schema.events_statements_history_long WHERE sql_text LIKE ‘%SELECT%’ ORDER BY timer_wait DESC LIMIT 10;

3. 解决问题
– 添加缺失的索引
mysql> ALTER TABLE employees ADD INDEX idx_salary (salary);

– 优化查询语句
mysql> EXPLAIN SELECT * FROM employees WHERE salary > 50000;

4. 验证解决方案
– 再次查看监控面板,确认QPS恢复正常
– 慢查询数减少

4.2 复制问题诊断

通过监控发现并解决复制问题:

# 复制问题诊断

1. 发现问题
– 通过Zabbix监控发现复制延迟增加
– 复制状态告警

2. 分析问题
– 查看复制状态
mysql> SHOW SLAVE STATUS\G;

输出示例:
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.100
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 1000000
Relay_Log_File: slave-relay-bin.000001
Relay_Log_Pos: 500000
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 800000
Relay_Log_Space: 1000000
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 30
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 12345678-1234-1234-1234-1234567890ab
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Reading event from the relay log
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
Master_public_key_path:
Get_master_public_key: 0
Network_Namespace:

3. 解决问题
– 检查网络连接
ping 192.168.1.100

– 检查主库性能
mysql> SHOW GLOBAL STATUS LIKE ‘Threads%’;

– 调整复制参数
mysql> SET GLOBAL slave_parallel_workers = 4;

4. 验证解决方案
– 再次查看复制状态,确认复制延迟减少
mysql> SHOW SLAVE STATUS\G;

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

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

联系我们

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

微信号:itpux-com

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