ubuntu

Ubuntu如何解决MySQL锁表问题

小樊
34
2025-12-04 11:15:36
栏目: 云计算

Ubuntu下MySQL锁表定位与处理

一、快速判断与止损

二、定位根因

三、常见场景与处理对照表

场景 典型特征 处理要点
Lock wait timeout exceeded 报错 1205,事务等待锁超时 1) 临时调大 innodb_lock_wait_timeout(如 SET GLOBAL innodb_lock_wait_timeout=120;)2) 优化慢SQL与索引,缩短事务 3) 分解大事务,减少持锁时间
长时间未提交事务 INNODB_TRXtrx_started 很早且长时间未提交 提交或回滚事务;必要时 KILL 对应线程
死锁 Deadlock SHOW ENGINE INNODB STATUS 出现 LATEST DETECTED DEADLOCK 按输出中建议的SQL顺序调整应用逻辑;尽量按固定顺序访问表与行;重试失败事务
DDL 阻塞 DML 执行 ALTER TABLE 等DDL时大量会话阻塞 避免高峰执行DDL;使用 pt-online-schema-changegh-ost 进行在线变更
索引缺失导致锁扩大 无索引或索引不当,扫描范围大,出现 gap lock/next-key lock 为过滤条件添加合适索引,减少锁范围与等待
备份导致全局只读 执行 FLUSH TABLES WITH READ LOCK (FTWRL) 后业务写入被阻塞 InnoDB库优先使用 mysqldump --single-transaction 获取一致性备份,避免FTWRL

四、优化与预防

五、Ubuntu下的常用命令与注意

0
看了该问题的人还看了