ALTER TABLE卡住主因是元数据锁(MDL)阻塞或tmpdir磁盘满:前者由未提交事务持有MDL读锁导致,需查INNODB_TRX定位并谨慎终止;后者因ALTER重建表大量用临时文件,需检查并扩容tmpdir。ALTER TABLE 卡住不动,SHOW PROCESSLIST 显示 Waiting for table metadata lock这是典型的元数据锁(MDL)阻塞,不是磁盘满导致的,但两者常被同时排查。MySQL 在执行 ALTER TABLE 时会申请 MDL 写锁,而只要有一个长事务(哪怕只是 SELECT)没提交,就卡住后续 DDL。立刻查 SHOW PROCESSLIST,找 State 为 Waiting for table metadata lock 的线程,记下它的 ID再查 SELECT * FROM information_schema.INNODB_TRX ORDER BY TRX_STARTED LIMIT 5;,比对 TRX_MYSQL_THREAD_ID 找出未提交事务的源头重点看 TRX_QUERY 是否为空(空表示事务已开始但还没执行语句),以及 TRX_STARTED 时间是否异常久不要直接 kill 大事务,先确认业务影响;若必须终止,用 KILL thread_id,不是 KILL QUERYERROR 1034 (HY000): Incorrect key file for table,磁盘空间其实够但报错这个错误表面像索引文件损坏,实际常因临时目录(tmpdir)所在分区爆满触发------ALTER TABLE 重建表时大量使用临时文件,而 tmpdir 默认可能在 /tmp,和 MySQL 数据目录不在同一磁盘。查当前设置:SELECT @@tmpdir;,再用 df -h 看对应路径剩余空间临时解决:改 tmpdir 到空间充足的挂载点,比如 SET GLOBAL tmpdir = '/data/tmp';(需确保目录存在且 MySQL 进程有读写权限)永久生效:在 my.cnf 的 mysqld 段加 tmpdir = /data/tmp,重启前确认该路径不被 SELinux 或 AppArmor 拦截注意:修改后新连接才生效,已有连接仍用旧 tmpdirALTER TABLE 修改列类型失败,提示 Lost connection to server during query这不是网络问题,而是大表 DDL 过程中内存或超时被强制中断。尤其当涉及字符集转换(如 utf8mb4)、全文索引重建、或在线 DDL 不支持的操作时,MySQL 可能回退到拷表模式,期间资源消耗陡增。 稿定AI 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能
相关推荐
2501_9418752814 分钟前
从配置中心到动态管理的互联网工程语法演进与多语言实践分享hfywmsj38 分钟前
广州餐饮铺位招租决策模型:多因子选址系统设计三8443 小时前
redis防御加固与安全基线lhldsg3 小时前
全民健身解决方案小程序开发:从0到1的技术实战泡海椒4 小时前
内置SPI函数库详解:JQuick-Java Builtin工具类实战用法hqyjzsb4 小时前
零 AI 项目经验,学 Python 转型 AI 的正确顺序是什么?IT大白鼠4 小时前
MySQL 分布式集群系列 · 第四篇——实操部署指南:从零搭建生产级 MySQL NDB 集群IT大白鼠4 小时前
MySQL 分布式集群系列 · 第三篇——核心原理精讲:NDB 自动分片、多主写入与数据同步Elastic 中国社区官方博客4 小时前
教程:使用 ES|QL 进行威胁狩猎