MySQL速查表常见问题排查手册

2026-11-06 来源: 点击量

MySQL 速查表・常见问题排查手册

一句话主线:按现象定位、先看日志再抓现场,优先区分慢查询、锁问题、连接耗尽、报错、主从同步、索引失效六大类,所有命令适配 MySQL 5.7 / 8.0。

提示:生产执行前尽量在测试验证;高危操作(kill、改参数)避开业务高峰。MySQL速查表常见问题排查手册

一、基础排查入口(每次故障优先执行)

查看错误日志,my.cnf 中 log_error 指定路径,8.0 默认 error.log。

-- 查看当前正在运行的会话

show processlist;

show full processlist;

-- 查看当前数据库变量

show variables like '%xxx%';

-- 查看全局状态

show global status like '%xxx%';

-- 开启慢查询(临时生效,重启失效)

set global slow_query_log = on;

set global long_query_time = 1;

慢查询日志是 SQL 性能问题最核心依据,long_query_time 单位秒。

二、慢查询 / SQL 执行慢排查

现象:接口超时、页面加载久,CPU 持续拉高。排查步骤:拿到 SQL → explain 分析执行计划 → 判断索引。

explain select ...;

重点看 explain 字段: type 最优顺序: system > const > eq_ref > ref > range > index > ALL,ALL 代表全表扫描。 Extra 重点标记:Using filesort 文件排序、Using temporary 创建临时表,都是高危信号。

优化方向:建立合适联合索引,遵循最左前缀;避免 select *;避免在索引字段上做函数运算;order by、group by 尽量复用索引。

常见坑:字符集不一致导致隐式转换,索引失效; like '% 关键词 ' 前缀模糊查询不走索引。

三、锁等待、死锁排查

现象:更新卡住、事务超时、报 Lock wait timeout exceeded。

-- 查看 InnoDB 锁等待(8.0)

select * from performance_schema.data_locks;

select * from performance_schema.data_lock_waits;

-- 查看当前事务

select trx_id,trx_started,trx_query from information_schema.innodb_trx;

死锁会自动回滚其中一个事务。解决思路:缩短事务,不要在事务内做耗时查询、等待前端交互;更新顺序统一,防止循环等待;小事务优先。

四、连接数爆满、 Too many connections

现象:无法连接数据库,报错连接过多。

show variables like 'max_connections';

show global status like 'Threads_connected';

Threads_connected 接近 max_connections 就是连接打满。排查:是否大量长连接不释放、代码忘记关闭连接、慢 SQL 长时间占用会话。临时缓解:杀掉异常会话

kill 会话id;

根治:应用层连接池优化,设置合理最大连接、空闲超时;不要盲目放大 max_connections,连接太多会加重数据库负担。

五、主从同步异常排查(主从架构)

现象:从库数据和主库不一致、同步停止。

show slave statusG

重点监控两个指标: Slave_IO_Running、Slave_SQL_Running,两个都为 Yes 才正常。常见故障: SQL 报错(主键冲突、表不存在)、binlog 日志丢失、gtid 不匹配。区分方案:传统 pos 模式 和 GTID 模式命令不同,不要混用。注意:不要随意跳过错误,会造成数据永久不一致,优先核对数据再决定是否跳过。

六、报错速查

Access denied for user:账号密码错误,或者 host 访问权限不允许。 Table doesn't exist:表名写错、库选错、大小写问题,Linux 下表名区分大小写。 Duplicate entry:唯一索引冲突,重复插入相同唯一值。 Packet for query is too large:sql 报文过大,调整 max_allowed_packet。 Can't create/write to file:导出文件权限、目录权限不足。

七、CPU 高、IO 高快速区分

CPU 高:大概率大量全表扫描、排序、临时表,重点查慢查询。 IO 高:大量随机读写,频繁更新、索引过多、缺少批量合并,查看 innodb buffer 使用情况。

show global status like 'Innodb_buffer_pool_read%';

缓冲池命中率低,说明 buffer pool 太小,磁盘读取频繁。

八、事务与隔离级别

查看隔离级别

show variables like 'transaction_isolation';

默认 REPEATABLE READ。读多业务、允许少量幻读,可以评估改为 READ COMMITTED,锁范围更小,减少锁冲突。

九、索引问题速查

重复索引、冗余索引会拖慢写入。查看索引:

show index from 表名;

原则:单表索引不宜过多;联合索引把筛选度高的字段放前面;不要给低区分度字段单独建索引,比如性别、状态。

十、应急处理清单

先抓现场:full processlist、锁信息、慢日志,再 kill,否则现场消失。

优先限流降级,而不是直接改参数。

不要在线上随意 alter table,大表 DDL 极易锁表,优先 pt-online-schema-change 等在线改表工具。

变更前备份;任何修复后核对数据。

十一、高频避坑

不要靠 restart mysql 解决问题,重启会掩盖现场,故障复现更难。不要随意 set global 改参数长期使用,需要写入 my.cnf,否则重启失效。 InnoDB 不要使用 MyISAM 的排查思路,MyISAM 不支持事务、锁机制完全不同。

相关文章
  • MySQL速查表常见问题排查手册
    MySQL速查表常见问题排查手册

    MySQL 速查表・常见问题排查手册一句话主线:按现象定位、先看日志再抓现场,优先区分慢查询、锁问题、连接耗尽、报错、主从同步、索引失效六大类,所有命令适配 MySQL 5.7 / 8.0。提示:生产执行前尽量在测试验证;高危操作(kill、改参数)避开业务高峰。一、基础...

  • 聚簇索引怎么用常见问题排查手册
    聚簇索引怎么用常见问题排查手册

    聚簇索引常见问题排查手册(MySQL InnoDB)前置:InnoDB 只有聚簇索引,聚簇索引就是主键索引,数据行本身就存在主键索引的叶子节点,索引和数据绑定在一起;二级索引叶子节点存的是主键值,不是行地址。适用:后端面试、数据库故障排查、慢 SQL 优化,只讲实战现象...

  • 聚簇索引路线图避坑指南:生产环境血泪教训
    聚簇索引路线图避坑指南:生产环境血泪教训

    聚簇索引路线图避坑指南:生产环境血泪教训 一、核心认知:聚簇索引决定整张表的物理存储InnoDB 是索引组织表,主键索引的叶子节点就是完整行数据,数据按主键顺序物理排列。5 一张表只有一个聚簇索引,选错主键,所有二级索引跟着遭殃。二、主键选型:最...

  • 一文搞懂Redis面试错误解决,面试和工作都用得到
    一文搞懂Redis面试错误解决,面试和工作都用得到

    一文搞懂 Redis 面试错误解决,面试和工作都用得到核心思路:Redis 报错不要死记报错码,分 客户端异常、连接异常、内存异常、持久化异常、集群异常、命令与使用规范 六大类,同时区分【面试标准答案】和【线上真实排查步骤】,面试直接说思路,工作直接照着...

  • MongoDB备份教程常见问题排查手册
    MongoDB备份教程常见问题排查手册

    MongoDB 备份教程常见问题排查手册一、备份前必做检查磁盘空间:目标目录剩余空间建议至少为数据库大小的 3 倍,避免备份中途因 /tmp 或目标盘满而失败。连接验证:先用 mongosh 测试连接和认证,确认能执行 ping 命令。oplog 窗口:副本集备份前检查 rs.printReplication...

  • 【干货】SQL优化方法优化技巧,性能提升10倍
    【干货】SQL优化方法优化技巧,性能提升10倍

    SQL 优化真正拉开差距的地方,不是背规则,而是先看懂执行计划,再减少数据库做的工作量。 下面这套方法适用于 MySQL、PostgreSQL、SQL Server 等主流数据库,按“诊断 → 改写 → 索引 → 架构”推进。 一、先诊断:不要凭感觉优化优化前先看三个数据源:慢查询日志...