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 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能
相关推荐
爱昏羔4 小时前
下篇:从检索到交互 — 物流RAG问答系统与WebUI全实现海兰4 小时前
【数据库】tdsql(mysql8.0)优化思考三_Jimmy_4 小时前
Agent引用数据库知识过时的增量同步方案煎饼学大模型5 小时前
Agent 的“大脑-手“解耦架构:当推理层和工具执行层各自独立演进min(a,b)6 小时前
学习第 4 天:面向对象与异常处理yangshicong8 小时前
第19章:AI安全防护与AI安全果汁华8 小时前
Function Calling 与 Python 实战完整指南c_lb72888 小时前
2026年不同基础做量化,先找AI能参与的位置muddjsv9 小时前
SQLite数据库文件机制详解:journal、wal、shm文件作用与备份避坑chenment10 小时前
ComfyUI 自定义节点开发:从零扩展你的图像生成工作流