You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL Cluster执行ALTER表报错1114:表已满,寻求技术支持

问题解决:ALTER TABLE指定NDB磁盘表空间时报ERROR 1114 (HY000): The table '#sql-4d3e_a' is full

问题场景

执行带磁盘表空间指定的表引擎转换命令:

ALTER TABLE beijing_xiaohongmen TABLESPACE ts_1 STORAGE DISK ENGINE NDBCLUSTER;

报错ERROR 1114 (HY000): The table '#sql-4d3e_a' is full,但直接执行ALTER TABLE beijing_xiaohongmen ENGINE NDBCLUSTER;可正常完成,说明DataMemory、IndexMemory配置及磁盘/内存空间充足。

已知配置:

  • ts_1表空间包含2个1024M的.dat文件
  • config.ini关键配置:
    [ndbd default]
    NoOfReplicas=1
    DataMemory=2048M
    IndexMemory=2048M
    MaxNoOfExecutionThreads=8
    
  • my.cnf关键配置:
    [mysqld]
    ndbcluster
    datadir=/usr1/DBData/mysql_cluster/mysqld/
    max_heap_table_size=1024M
    tmp_table_size=2048M
    

问题原因

指定磁盘表空间执行ALTER时,NDB会在目标表空间内创建临时表(即报错中的#sql-4d3e_a)存储转换过程中的数据,当前ts_1的总容量(2048M)或剩余可用空间不足以容纳临时数据及最终表数据的临时副本,即使整体磁盘空间充足也会触发该错误。

解决方案

1. 分两步完成表迁移

先将表转换为NDB引擎(利用已验证充足的DataMemory/IndexMemory),再将表移动到目标磁盘表空间:

-- 第一步:转换引擎(无表空间指定,正常执行)
ALTER TABLE beijing_xiaohongmen ENGINE NDBCLUSTER;
-- 第二步:迁移到磁盘表空间
ALTER TABLE beijing_xiaohongmen TABLESPACE ts_1 STORAGE DISK;

此方法规避了一步转换时临时表占用磁盘表空间的问题。

2. 扩展目标磁盘表空间容量

步骤1:查看当前表空间使用情况

通过NDB管理工具ndb_mgm执行命令,确认ts_1的已用/剩余空间:

ndb_mgm -e "SHOW TABLESPACES"

步骤2:添加更大的数据文件到ts_1

执行SQL命令添加新的数据文件(示例添加2048M的文件):

ALTER TABLESPACE ts_1 ADD DATAFILE 'ts_1_3.dat' SIZE 2048M ENGINE NDBCLUSTER;

添加完成后,再次执行原ALTER命令即可。

3. 检查NDB临时磁盘空间配置

若上述方法无效,需检查config.ini中与磁盘临时空间相关的参数,确保DiskPageBufferMemory(磁盘页缓冲内存)配置足够,可调整为:

[ndbd default]
DiskPageBufferMemory=512M

修改后需重启NDB数据节点生效。

内容的提问来源于stack exchange,提问作者user19993631

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 07:25:21