如何为大型二进制数据配置MySQL 5.6 LONGBLOB
在问我的问题之前,我先介绍一下背景:我正在使用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前缀以内联方式存储 以下是表格创建:如何为大型二进制数据配置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
CREATE TABLE `file_content` (
`fileid` bigint(20) NOT NULL,
`content` LONGBLOB NOT NULL,
PRIMARY KEY (`fileid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我有以下相关的my.cnf设置
允许的最大数据包数=1Ginnodb_文件每_表=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
的值时要小心:
对于那些找不到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就足够了。