目录标题
好的,下面是针对 MySQL 数据库的性能瓶颈与高可用异常切换的排查手段、步骤、常用工具与命令的详细清单,结构清晰、可操作性强。
🧱 一、MySQL 性能瓶颈排查清单
1. 监控初判
-
目标:发现“是否真的慢”、“慢在哪”、“慢多久了”
-
推荐监控项:
- QPS/TPS
- Threads_connected / Threads_running
- InnoDB Buffer Pool Hit Rate
- Table Locks / Row Locks
- Handler_*、Select_scan、Sort_merge_passes 等执行计划相关指标
-
工具:
- Grafana + Prometheus(mysqld_exporter)
- 阿里云、腾讯云 RDS 控制台监控
- 自建 Percona PMM
2. 系统层诊断(主机资源)
top -c # CPU、内存消耗
vmstat 1 5 # 系统整体性能
iostat -x 1 3 # 磁盘瓶颈
free -m # 内存使用
sar -n DEV 1 3 # 网络瓶颈
3. 数据库内部排查
3.1 连接状态分析
SHOW PROCESSLIST; -- 当前连接/线程/阻塞情况
SHOW FULL PROCESSLIST\G;
SHOW STATUS LIKE 'Threads%'; -- 连接、运行线程数
3.2 锁/事务/死锁
SHOW ENGINE INNODB STATUS\G; -- 死锁信息、阻塞等待
SELECT * FROM performance_schema.data_locks; -- 行锁情况(8.0+)
SELECT * FROM information_schema.innodb_locks; -- 5.7 手动启用
3.3 慢查询日志分析
-- 开启慢查询日志(my.cnf)
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
pt-query-digest /var/log/mysql/slow.log # SQL优化神器
4. Performance Schema 视角
SELECT * FROM sys.user_summary_by_statement_type;
SELECT * FROM sys.statements_with_sorting;
SELECT * FROM sys.schema_table_lock_waits;
5. 优化方向建议(基于瓶颈类型)
类型 | 症状 | 优化手段 |
---|---|---|
CPU高 | 多SQL并发,SQL逻辑复杂 | 索引优化、分表分库、limit优化 |
IO高 | 全表扫描、未命中缓存 | 提升 Buffer Pool,优化慢SQL |
内存不足 | 查询缓存命中低,临时表多 | 增加内存、调整 join_buffer_size 等 |
死锁频发 | 大事务/长事务冲突 | 事务细粒度、锁排序一致性 |
连接爆满 | 应用无连接池 | 引入连接池,设置 max_connections 合理值 |
🌐 二、MySQL 高可用异常切换排查清单
MySQL 常见高可用架构:主从复制(Async)、GTID+Semi-sync、MGR(Group Replication)、MHA、Orchestrator、Keepalived + VIP。
1. 主从复制排查
1.1 查看主从状态
SHOW SLAVE STATUS\G;
关键字段说明:
Slave_IO_Running
,Slave_SQL_Running
:都要是 YesSeconds_Behind_Master
:延迟秒数Last_IO_Error
,Last_SQL_Error
:错误日志
1.2 常见问题分析
问题 | 原因 | 排查方法 |
---|---|---|
延迟大 | SQL慢、主库负载大 | SHOW PROCESSLIST 、查慢日志 |
复制中断 | 网络闪断、GTID不一致 | Last_SQL_Error 查看 |
主从数据不一致 | 忽略事务、忽略库表 | pt-table-checksum 工具校验 |
2. MGR(Group Replication)
2.1 状态查看
SHOW STATUS LIKE 'group_replication%';
SELECT * FROM performance_schema.replication_group_members;
2.2 异常场景排查
- 网络分区 → 成员退出群组(单节点运行,降级为读写)
- MGR 切换失败 → auto_increment_offset/GTID冲突
- 多节点无法投票 → quorum 不足
3. MHA/Orchestrator/Keepalived 异常切换
工具 | 排查方式 | 关键日志/命令 |
---|---|---|
MHA | 看 manager 日志,确认是否成功 failover | /var/log/masterha/manager.log |
Orchestrator | Web UI + Agent 日志 | /var/log/orchestrator/orchestrator.log |
Keepalived | 查看 VIP 漂移状态 | ip addr , systemctl status keepalived |
Pacemaker | crm status 查看资源状态 | pcs status , corosync |
🔧 三、常用工具和命令清单
类型 | 工具/命令 | 用途说明 |
---|---|---|
资源分析 | top , iostat , vmstat , free | 系统层面瓶颈 |
SQL分析 | SHOW PROCESSLIST , EXPLAIN , pt-query-digest | 慢查询优化 |
锁分析 | SHOW ENGINE INNODB STATUS , performance_schema.data_locks | 锁冲突分析 |
复制故障 | SHOW SLAVE STATUS , Last_SQL_Error | 主从复制问题 |
高可用切换 | systemctl , orchestrator , keepalived , crm status | 故障切换定位 |
数据一致性 | pt-table-checksum , pt-table-sync | 主从一致性校验 |
网络问题分析 | ping , telnet , tcpdump , ss | 网络中断或连接失败 |
✅ 建议的抽象方式(MySQL专用)
你可以将 MySQL 故障排查标准化成如下“排查表”:
维度 | 子维度 | 检查项 | 工具/命令 | 判断标准 |
---|---|---|---|---|
系统资源 | CPU | 占用是否过高 | top , vmstat | > 80% 持续高负载 |
系统资源 | I/O | 磁盘延迟高 | iostat | await > 10ms |
数据库内部 | 慢SQL | 有慢查询堆积 | slow.log + pt-query-digest | 查询时间 > 1s |
数据库内部 | 锁 | 是否存在死锁 | SHOW ENGINE INNODB STATUS | 有死锁信息 |
复制 | 状态异常 | IO/SQL线程中断 | SHOW SLAVE STATUS | Running != Yes |
高可用 | VIP未漂移 | keepalived故障 | ip addr , systemctl status | VIP不在主库 |
高可用 | 主节点退出 | MGR成员缺失 | replication_group_members | 成员数异常 |