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
相关产品推荐
相关产品推荐

