`
www_3com
  • 浏览: 7700 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Mysql的大字段问题

 
阅读更多

前段时间在项目压测的时候出现了mysql的大字段问题,导致数据层无法存储。各方找人求助,都无果,最后求助万能的google,找到国外高人的解决方案,一步步来,终于解决了。这后来也没写总结,只是写了一篇简单的有道云笔记,结果今天线上的版本又出了这个问题,才不免责怪自己怎么没有发一篇详细博文记录,以及及时的分享给兄弟们(没办法最近太忙了,忙出翔来了)。

 

【问题描述】

最早mysql端报这个错

Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs

 

今天线上版本的错误:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.

 

【导致问题的原因】

总结了下原因是因为mysql-innodb是按照page存储数据的,每个page max size是16k,然后每个page两行数据,所以每行最大8k数据。如果你的字段是blob之类的话,会存储在page之外的溢出区里。

但是innodb默认的approach(羚羊)存储格式会把每个blob字段的前864个字节存储在page里,所以你的blob超过一定数量的话,单行大小就会超过8k,所以就报错了

【解决思路】

解决方式是使用innodb的Barracuda(梭鱼) 存储格式

这种格式对blob字段的处理方式是在page里头只存储一个20byte大小的指针,其它全存在溢出区,所以你轻易超不了8k

 

【详细步骤】

1. 打开mysql的配置my.ini。在innodb配置出添加:innodb_file_per_table=1

Mysql的大字段问题

大概的意思就是打开mysql每张表都是独立存储空间的开关。

 

2. 然后命令检查下上述开关是否打开。

show variables like '%per_table%';

 

Mysql的大字段问题

如上图开关就打开了。

 

3. 设置mysql全局变量:innodb_file_format = Barracuda(梭鱼)

命令:set GLOBAL innodb_file_format = 'Barracuda';

然后检查下是否设置好了:

命令:show GLOBAL VARIABLES LIKE '%file_format%';

 

Mysql的大字段问题

如上就是好了

 

4. 设置对应表的属性:ROW_FORMAT=COMPRESSED

然后检查下标的属性是否是你设置的:COMPRESSED

 

5. 如上步骤以后,就OK了

 

 

今天又让tx折腾一天,MD。长记性,再忙也要记录,要给团队分享,希望我们团队,我的兄弟们,我们公司积累越来越多的财富。

分享到:
评论

相关推荐

    MySQL数据表添加字段

    在MySQL数据库管理中,添加字段是一项常见的操作,用于在已有的数据表中增加新的列来扩展数据表的结构。这通常发生在数据需求发生变化或者需要记录更多相关信息时。本篇文章将详细探讨如何在MySQL中添加字段,以及...

    mysql数据库字段复制

    MySQL数据库字段复制是一个常见的需求,尤其在数据迁移、备份或者多环境同步的场景下。PHP作为流行的服务器端脚本语言,常被用来处理这类任务。本文将深入探讨如何使用PHP来实现MySQL数据库字段的高效复制。 首先,...

    解决CodeSmith不能读取MySql数据库字段说明的问题

    本文将深入探讨如何解决在使用CodeSmith时遇到的无法读取MySql数据库字段说明的问题。CodeSmith是一款强大的C#代码生成工具,它允许开发者自定义模板来快速生成代码,从而减少手动编写重复性代码的工作量。然而,在...

    mysql添加字段语句

    mysql添加字段语句

    Mysql的longblob字段插入数据问题解决

    在使用mysql的过程中,有个问题就是mysql的优化,mysql中longblob字段在5.5版本中默认的为1M。 想改变这个问题,需要注意几点: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (2054817 > ...

    mysql只取字段的中文内容

    mysql获取字段中内容

    mysql字段加密

    MySQL 字段加密 MySQL 字段加密是将数据库字段类型设置为 varbinary 类型,并将加密盐设置为全局变量,以实现对敏感数据的保护。本文将详细介绍 MySQL 字段加密的实现步骤和相关知识点。 数据库字段类型 在 MySQL...

    mysql批量增加字段.txt

    MySQL批量对表增加指定字段,会快速实现批量字段的添加。写了2个存储存储过程,执行即可。方便快速!

    mysql自增字段重排 mysql删除表后自增字段从1开始.pdf

    理解这些知识点对于管理和维护MySQL数据库中的自增字段至关重要,可以帮助避免潜在的问题并优化数据存储效率。根据实际需求选择合适的存储引擎,以及正确处理自增字段的删除和初始化,能有效提升数据库的性能和管理...

    mysql 获取字段中数字的函数

    自己写的一个获取字符串字段中数字的函数,已测试通过可用。

    解析mysql不重复字段值求和

    其原因是distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,我只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。...

    mysql 自增长 时间字段

    MySQL 自增长时间字段详解 MySQL 是一种广泛应用的关系型数据库管理系统,具有强大的数据存储和管理能力。在实际应用中,我们经常需要对数据进行自增长和时间戳记录,本文将详细介绍 MySQL 中的自增长和时间字段的...

    MySQL字段类型列表

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,其字段类型设计得非常灵活,以适应各种数据存储需求。在MySQL中,字段类型决定了数据的存储方式、大小和格式。以下是对MySQL5中常见字段类型的详细说明: 1. **...

    Oracle_Mysql_Sqlserver字段类型转换参考

    Oracle_Mysql_Sqlserver字段类型转换参考Oracle_Mysql_Sqlserver字段类型转换参考Oracle_Mysql_Sqlserver字段类型转换参考Oracle_Mysql_Sqlserver字段类型转换参考Oracle_Mysql_Sqlserver字段类型转换参考Oracle_...

    mysql 数据字段导出工具 增加了注释字段导出

    在别人基础上修改了一下。 感性原作者的奉献 一起贡献都归功与原作者

    MySQL自增字段为何报错.pdf

    "MySQL自增字段报错解决方案" MySQL自增字段报错是指在MySQL数据库中,自增字段出现重复值或无法再添加新记录的...MySQL自增字段报错需要我们具备一定的数据库知识和解决方案,以便快速解决问题和避免类似问题的出现。

    解决CodeSmith不能读取MySQL字段备注说明

    本文主要针对"CodeSmith无法读取MySQL字段备注说明"的问题提供解决方案,并详细介绍相关知识点。 CodeSmith是一款强大的代码生成工具,它允许开发者通过模板语言自动生成代码,如实体类、DAL、BLL等,大大减少了...

    mysql导出工具(blob字段)

    mysql导出工具,可导出无注释插入语句,表中字段有blob类数据,插入语句前还有锁表操作语句,适合多种场景

    自动读取mysql数据库字段并自动生成java属性和set和get方法

    在给定的标题"自动读取mysql数据库字段并自动生成java属性和set和get方法"中,我们可以理解这是一个自动化过程,它减少了开发者手动编写Java代码的工作量。该过程通常包括以下几个步骤: 1. **连接数据库**:首先,...

Global site tag (gtag.js) - Google Analytics