Drupal9数据库迁移出现#2006 MySQL server has gone away错误求助
合并ALTER TABLE语句触发MySQL 2006错误的原因分析
以下是该问题的常见触发原因:
- 单语句锁表&资源占用超时:MySQL执行单条ALTER TABLE同时新增主键+多个二级索引时,会一次性完成全表重建,
aza_node_revision__body作为Drupal的字段存储表通常数据量较大,单次重建会持有表元数据锁过长、占用大量内存与磁盘IO,超过MySQL的wait_timeout/interactive_timeout阈值后,服务端会主动断开连接,抛出2006错误。拆分语句后,两次ALTER操作分别重建表,每次锁表时间大幅缩短,不会触发超时阈值。 - 临时空间阈值超限:单次添加多个索引时,MySQL需要生成临时排序文件、在线DDL日志来构建所有索引,若服务器临时目录(tmpdir)可用空间不足,或
innodb_online_alter_log_max_size参数配置过小,临时数据超过上限时服务端会直接终止连接。拆分后每次操作仅需处理少量索引的排序构建,临时资源占用远低于阈值,可正常执行。 - 版本兼容BUG:若新服务器部署的MySQL/MariaDB版本与原站点数据库版本差异较大,或是使用5.7早期版本,部分版本存在同时添加主键+多个二级索引时异常断连的已知BUG,拆分执行可直接规避该类版本问题。
内容的提问来源于stack exchange,提问作者julianx2rl
相关产品推荐
相关产品推荐

