【生产中Mysql,Row size too large(>8126)解决方案】

生产中Mysql,Row size too large(>8126)解决方案

产生原因

因为单行数据的大小超过了InnoDB引擎的最大行大小限制,默认是8126字节‌。是因为表中有太多的大字段,比如VARCHAR或TEXT类型,导致行大小总和超过了限制

解决方法

1. 临时解决方法

  1. 调整列类型为TEXT/BLOB类型‌:
    将占用空间较大的VARCHAR列改为TEXT或BLOB类型,此类字段仅存储768字节前缀在行内,其余内容存储于溢出页,可显著减少行大小‌
  2. 修改表的行格式‌:
    执行以下SQL调整行格式为DYNAMIC或COMPRESSED:
    	LTER TABLE 表名 ROW_FORMAT=DYNAMIC;
    
    该格式下,BLOB/TEXT字段仅存储20字节指针,而非768字节前缀‌
  3. ‌拆分大字段或分表‌:
    若单行字段过多,可垂直拆分表结构,将部分字段迁移到关联表中

以上方法,不需要重启MySQL,最多就是热部署应用而已,不会有任何影响

2. 最终解决方法

  1. 关闭InnoDB严格模式‌
    在my.cnf配置文件中添加:
    [mysqld]
    innodb_strict_mode=0
    
    此操作会绕过行大小校验,但可能导致数据截断‌
  2. 调整InnoDB日志文件大小‌
    修改innodb_log_file_size参数(建议≥512MB):
    innodb_log_file_size=1G
    
    需删除原有日志文件
    完成以后配置后需要重启mysql。 这个建议晚上没有用户的时候操作,否则影响比较大
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值