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

MySQL 8备份恢复失败:视图临时表行大小超限求助

无需修改备份文件解决MySQL视图临时表行大小超限的恢复失败问题

问题原因

备份文件中自动生成的视图临时表(如示例中的user_doc),其列xls和name均为VARCHAR(16000),在utf8mb4字符集下每个字符占4字节,总行大小达16000*4*2=128000字节,超过InnoDB引擎非BLOB/TEXT列的65535字节行大小限制,导致恢复时触发Error Code: 1118报错。

解决方法

1. 恢复会话中临时关闭InnoDB严格模式

这是最直接的方案,无需修改备份文件,仅在恢复过程中临时放宽行大小限制:

  • 登录MySQL客户端,执行以下命令后导入备份:
SET SESSION innodb_strict_mode = OFF;
SOURCE /path/to/your/backup_file.sql;
SET SESSION innodb_strict_mode = ON;
  • 也可通过命令行一次性完成:
mysql -u [用户名] -p -e "SET SESSION innodb_strict_mode = OFF; SOURCE /path/to/backup_file.sql; SET SESSION innodb_strict_mode = ON;"

原理:关闭innodb_strict_mode后,InnoDB允许创建行大小超限的临时表(该表随后会被备份中的DROP命令删除,不影响最终数据库结构),恢复完成后重新开启严格模式,确保后续操作遵循规范。

2. 若允许重新备份,调整mysqldump参数避免生成临时表

如果可以重新生成备份,使用--skip-opt参数执行mysqldump,该参数会禁用默认优化选项,避免生成视图对应的临时表:

mysqldump -u [用户名] -p bug --skip-opt > new_backup.sql

说明:此方法生成的备份文件不会包含引发问题的临时表创建语句,恢复时无需调整参数即可正常执行。

注意事项

  • 优先使用会话级的innodb_strict_mode调整,避免全局设置影响其他正在运行的业务。
  • 恢复完成后务必确认innodb_strict_mode已重新开启,防止后续创建不符合规范的表结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:36:16