小编nra*_*por的帖子

如何为大型二进制数据配置MySQL 5.6 LONGBLOB

在我提出一个问题之前:我正在使用MySQL 5.5数据库的MySQL Workbench 6.1从一台机器到另一台机器上的5.6进行数据导出/导入.这两台机器都是ubuntu,其中一台是32位而另一台是64位.

我转储数据没有问题,但当我尝试加载它时,我得到:

ERROR 1118(42000)在第1807行:行大小太大(> 8126).将某些列更改为TEXT或BLOB或使用ROW_FORMAT = DYNAMIC或ROW_FORMAT = COMPRESSED可能会有所帮助.在当前行格式中,760字节的BLOB前缀以内联方式存储.

这是表创建:

CREATE TABLE `file_content` (
  `fileid` bigint(20) NOT NULL,
  `content` LONGBLOB NOT NULL,
  PRIMARY KEY (`fileid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

我有以下相关的my.cnf设置...

max_allowed_pa​​cket = 1G
innodb_file_per_table = 1
innodb_file_format = Barracuda

我花了很多谷歌搜索时间试图找出问题所在.顺便说一句,如果我删除主键(这里没问题,但另一个表有外键的表抱怨.

幸运的是,我有ssh访问框,所以我可以看到实际的mysqldb.log.为什么我发现真的很有意思......

2014-08-12 20:42:12 25246 [错误] InnoDB:总blob数据长度(14179167)大于重做日志文件大小(3072)的10%.请增加innodb_log_file_size.

因此,将重做日志文件大小增加到10x LONGBLOB大小修复了我的问题.但这是否意味着要插入1G LONGBLOB(因为数据包大小而实际最大值),我将需要一个10G innodb_log_file_size.

任何人都可以解释"重做日志大小错误"如何变成"行大小太大(> 8126)"错误.

顺便说一下,我无法控制这个数据库的结构,所以没有"你为什么要在数据库中存储大的blob".

TIA

mysql sql innodb row

40
推荐指数
1
解决办法
6万
查看次数

标签 统计

innodb ×1

mysql ×1

row ×1

sql ×1