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

如何为大型二进制数据配置MySQL 5.6 LONGBLOB,mysql,sql,row,innodb,Mysql,Sql,Row,Innodb,在问我的问题之前,我先介绍一下背景:我正在使用MySQL Workbench 6.1将MySQL 5.5数据库从一台机器导出/导入到另一台机器上的5.6。两台机器都是ubuntu,一台32位,另一台64位 我转储数据没有问题,但当我尝试加载数据时,我得到: 第1807行出现错误1118(42000):行大小太大(>8126)。将某些列更改为文本或BLOB或使用ROW\u FORMAT=DYNAMIC或ROW\u FORMAT=COMPRESSED可能会有所帮助。在当前行格式中,768字节的BLO

在问我的问题之前,我先介绍一下背景:我正在使用MySQL Workbench 6.1将MySQL 5.5数据库从一台机器导出/导入到另一台机器上的5.6。两台机器都是ubuntu,一台32位,另一台64位

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

第1807行出现错误1118(42000):行大小太大(>8126)。将某些列更改为文本或BLOB或使用ROW\u FORMAT=DYNAMIC或ROW\u FORMAT=COMPRESSED可能会有所帮助。在当前行格式中,768字节的BLOB前缀以内联方式存储

以下是表格创建:

CREATE TABLE `file_content` (
  `fileid` bigint(20) NOT NULL,
  `content` LONGBLOB NOT NULL,
  PRIMARY KEY (`fileid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我有以下相关的my.cnf设置

允许的最大数据包数=1G
innodb_文件每_表=1
innodb_文件_格式=梭鱼

我花了很多时间在谷歌上搜索,试图找出问题所在。顺便说一句,如果我删除主键(这里没有问题,但是另一个表在这个表中有外键,这会引起问题)

幸运的是,我可以通过ssh访问这个框,这样我就可以看到实际的mysqldb.log了

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

因此,将重做日志文件大小增加到10x LONGBLOB大小解决了我的问题。然而,这是否意味着要插入1G LONGBLOB(由于数据包的大小,这是实际的最大值),我需要10G innodb日志文件大小

有人能解释一下“重做日志大小错误”是如何变成“行大小太大(>8126)”错误的吗

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


TIA

此问题的原因是变更日志中的变更:

由于MySQL 5.6引入了redo log BLOB write limit,该设置应该比表行中的最大BLOB数据大小加上其他可变长度字段(VARCHAR、VARBINARY和TEXT type字段)的长度大10倍。如果您的设置已经足够大,或者您的表不包含BLOB数据,则无需执行任何操作

要解决您的问题,您必须增加
[mysqld]
部分下方
my.ini
中选项的值。其默认值为
48M
。将其设置为

[mysqld]
innodb_log_file_size=256M
帮了我的忙

更改
innodb_log_file_size
的值时要小心:

  • 您需要干净正常地关闭服务器
  • 移开 (不要删除)名为ib_logfile0的日志文件, ib_logfile1,依此类推
  • 检查错误日志以确保没有错误 关闭时出现问题
  • 然后重新启动服务器并查看错误日志 仔细输出。您应该看到InnoDB打印消息说 日志文件不存在。它将创建新的日志文件,然后启动
  • 在这 您可以验证InnoDB是否正常工作,然后可以删除 旧的日志文件

  • 对于那些找不到XAMPP的人:
    起初,我找不到要编辑的正确文件
    innodb\u log\u file\u size


    实际文件:
    xampp/mysql/bin/my.ini
    只需在以下位置导航:xampp\mysql\bin\my.ini并尝试将innodb\u log\u文件的大小更改为256 MB

    注意,
    my.ini
    文件有时被称为
    my.cnf
    ,对于ubuntu,通常位于
    /etc/mysql/my.cnf
    中d设置快速关机-如果有人想检查当前设置,请快速提醒:打开SQL控制台并显示变量,如“innodb_log_file_size”;您可能不需要增加到256M,我有一个DB,其中128就足够了。