【故障案例】mysql8主备搭建报错ERROR 1118(42000):Row size too large(>8126)
最近网友问了个问题,他在搭建MySQL主从的时候,备库导入数据报错ERROR 1118(42000):Row size too large(>8126), Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline。真实原因是字段太多,
问题描述
最近网友问了个问题,他在搭建MySQL主从的时候,备库导入主库备份数据报错ERROR 1118(42000):Row size too large(>8126), Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline
分析
真实原因是字段太多, 导致行长度超过了8126,官方要求每页能存放至少2条数据, 即每条数据最长为PAGE_SIZE的一半。
解决方案
检查 INNODB_STRICT_MODE
SHOW VARIABLES LIKE 'innodb strict mode';
关闭严格模式
set global innodb_strict_mode=off;
也可以在配置文件my.cnf中修改
在[mysqld]下面新增
innodb_strict_mode=0
总结
什么是 INNODB STRICT MODE?
数据库参数innodb_strict_mode用于设置是否开启严格检查模式,当innodb_strict_mode=ON时,执行创建表(CREATE TABLE)、更改表(ALTER TABLE)和创建索引(CREATE INDEX)等语句时会使用严格模式,若存在错误不会触发警告而是直接抛出错误;当innodb_strict_mode=OFF时则使用非严格模式,遇到错误语法会用默认语法替换。检查源数据库和目标数据库的该参数是否一致至关重要,若不一致可能导致任务失败,建议将其设置为一致,因为开启严格模式时 InnoDB 会严格遵循 SQL 标准,尤其在数据一致性和完整性方面,若发现潜在数据完整性问题会返回错误而非警告,有助于开发人员提前捕获问题以确保数据的高可靠性。

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)