MySQL 故障排查与优化

一、故障排查核心流程

  1. 现象定位:连接失败、慢查询、CPU/IO 高、锁等待、主从延迟、OOM、宕机
  2. 排查顺序:服务状态 → 错误日志 → 慢查询日志 → 实时进程 → 系统资源
  3. 分层排查:应用层 → 网络层 → MySQL 服务层 → 存储引擎层 → 系统层

二、常见故障速查

|----------|------------------------------------------------------------------------------|--------------------------------------------|
| 故障类型 | 排查命令 / 方法 | 解决方案 |
| 无法连接 | systemctl status mysqld、telnet ip 3306、show variables like 'max_connections' | 启动服务、开放防火墙、授权 user@host、调大连接数、检查密码 /socket |
| CPU 100% | show full processlist;、explain select...;、show status like 'Select%' | 优化慢查询、加索引、避免全表扫描、减少排序 / 分组 |
| IO 高 | 查看 redo log 大小、Created_tmp_disk_tables、索引碎片 | 调整刷盘策略、增大 tmp_table_size、优化索引、清理碎片 |
| 锁等待 / 死锁 | show engine innodb status\G、performance_schema.data_locks | 减小事务粒度、避免长事务、热点更新队列化、调整隔离级别 |
| 主从延迟 | show slave status\G、show master status; | 升级 MySQL 多线程复制、拆分大事务、给无主键表加主键、减轻从库压力 |
| OOM 内存溢出 | 检查 innodb_buffer_pool_size、连接数、临时表 | 合理分配内存、限制连接数、使用连接池、调小会话级缓存 |
| 表损坏 | MyISAM:myisamchk;InnoDB:innodb_force_recovery | 修复表文件、检查磁盘、恢复备份 |

三、优化核心方向(实操优先)

1. SQL 优化(最关键)
  • 避免:select *、like '%xxx%'、隐式转换、大 in、子查询嵌套过深
  • 分页优化:limit 100000,10 → 延迟关联 / 主键分页
  • 索引利用:覆盖索引、联合索引(最左前缀)、避免索引失效
2. 索引优化
  • 高频查询字段建索引,单表索引 ≤ 5 个
  • 联合索引顺序:等值匹配 → 范围查询 → order by
  • 删除重复 / 冗余 / 未使用索引,更新频繁字段慎建索引
3. 关键配置(my.cnf 精简)

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| mysqld character-set-server=utf8mb4 max_connections=1000 wait_timeout=600 innodb_buffer_pool_size=物理内存50%-70% innodb_log_file_size=1G-4G innodb_flush_log_at_trx_commit=1(强一致)/2(性能) sync_binlog=1(强一致)/1000(性能) tmp_table_size=64M max_heap_table_size=64M sort_buffer_size=256K join_buffer_size=256K slow_query_log=1 long_query_time=1 log_queries_not_using_indexes=1 |

4. 表结构优化
  • 合适字段类型:int > varchar、datetime 替代字符串
  • 必须主键(自增 bigint),大字段(text/blob)拆分
  • 单表数据量 2000w,必要时分库分表 / 分区
5. 架构优化
  • 读写分离、连接池(druid/hikari)、Redis 缓存
  • 高可用:MGR、MHA、主从切换

四、高频排查命令

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| -- 连接与进程 show full processlist; show variables like 'max_connections'; show status like 'Threads_connected'; -- 慢查询 show variables like '%slow%'; show status like 'Slow_queries'; -- InnoDB 状态 show engine innodb status\G -- 锁与事务 select * from information_schema.innodb_trx; select * from performance_schema.data_locks; -- 索引与执行计划 show index from table_name; explain analyze select ...; -- 主从复制 show slave status\G show master status; |

五、必监控指标

  • QPS/TPS、慢查询数、连接数 / 活跃线程
  • InnoDB 缓存命中率、锁等待 / 死锁次数
  • 主从延迟、CPU / 内存 / 磁盘 IO / 磁盘使用率
相关推荐
充电zcx11 小时前
Linux:4:开发工具详解
linux·运维·服务器
RoboWizard12 小时前
三星和金士顿内存条哪个更适合游戏超频
大数据·人工智能
深圳市恒星物联科技有限公司12 小时前
轻量MCU设备通过OpenHarmony兼容性测评的全流程关键要点与实战踩坑经验
大数据·人工智能·物联网·鸿蒙
TDengine (老段)12 小时前
TDengine 常见问题 TOP3
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
Leo.yuan14 小时前
盘点2026十大主流国产数据仓库软件:从开源到商业,企业级怎么选?
大数据
长谷深风11114 小时前
评测AI Agent:三种裁判各司其职
java·大数据·开发语言·人工智能·ai agent
gongfeng300015 小时前
福州企业级AI自动化获客解决方案品牌梳理与适用场景分析
运维·人工智能·自动化·g-claw ai员工
螺蛳粉 螺蛳粉15 小时前
MySQL 分布式集群系列 · 第五篇——全方位对比:NDB、MGR、主从复制、分库分表怎么选?
数据库·分布式·mysql
大大大大晴天15 小时前
元数据之后,数据治理该做什么:标准、指标与主数据
大数据
光电笑映16 小时前
网络通信基础:从协议分层到 Socket 编程预备
linux·运维·服务器·网络