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

恢复容器内MySQL数据库时Row size too large错误的解决方法

解决MySQL恢复时"Row size too large"错误的方案

方案一:修改表的行格式为DYNAMIC/COMPRESSED

你的accounts表当前使用ROW_FORMAT=COMPACT,InnoDB在这种格式下会把BLOB/TEXT的前768字节存在行内,叠加多个varchar列的总长度后,超出了InnoDB默认的行大小限制(8126字节)。修改为DYNAMIC或COMPRESSED格式即可解决:

  • 直接编辑备份SQL文件中accounts表的创建语句,把末尾的ROW_FORMAT=COMPACT替换为ROW_FORMAT=DYNAMIC:
    ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
    
  • 或者替换为ROW_FORMAT=COMPRESSED(适合需要压缩存储的场景),修改后重新执行你的导入命令。

方案二:临时调整MySQL参数(不推荐长期使用)

如果不想修改备份文件,可以在导入前临时关闭InnoDB严格模式:

  1. 进入容器内的MySQL控制台:
    docker exec -it mysql-server-main /usr/bin/mysql -u root --password=password
    
  2. 执行以下命令关闭严格模式:
    SET GLOBAL innodb_strict_mode = OFF;
    
  3. 退出控制台后重新执行导入命令。

注意:这个方法只是临时绕过限制,长期关闭严格模式可能隐藏其他潜在问题,建议导入完成后改回innodb_strict_mode = ON。

方案三:优化列的长度定义

结合实际业务需求,检查accounts表中不需要过长的varchar列,比如billing_address_country、website等列如果实际用不到255字节,可以适当缩短长度,减少行内总占用空间。例如把varchar(255)改为varchar(100),但此方法需确保不会影响业务数据存储。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:37:16