在我提出一个问题之前:我使用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;
我有以下相关的my.cnf设置......
max_allowed_packet的= 1G
innodb_file_per_table = 1
innodb_file_format =梭鱼
我花了很多谷歌搜索时间试图找出问题所在。顺便说一句,如果我删除主键(这里没问题,但另一个有外键的表在这个表中抱怨。
幸运的是,我有ssh访问框,所以我可以看到实际的mysqldb.log。为什么我发现真的很有趣......
2014-08-12 20:42:12 25246 [错误] InnoDB:总blob数据长度(14179167)大于重做日志文件大小(3072)的10%。请增加innodb_log_file_size。
因此将重做日志文件大小增加到10倍LONGBLOB大小解决了我的问题。但这是否意味着要插入1G LONGBLOB(即由于数据包大小而实际最大值),我需要一个10G innodb_log_file_size。
任何人都可以解释"重做日志大小错误"变成"行大小太大(> 8126)"错误。
BTW我无法控制这个数据库的结构,所以没有"为什么要在数据库中存储大的blob"。
TIA
答案 0 :(得分:77)
此问题的原因是MySQL 5.6.20中的更改可以在更改日志中读取:
由于为MySQL 5.6引入了重做日志BLOB写入限制,innodb_log_file_size设置应该比表中行中找到的最大BLOB数据大小加上其他可变长度的长度大10倍fields(VARCHAR,VARBINARY和TEXT类型字段)。如果innodb_log_file_size设置已足够大或您的表不包含BLOB数据,则无需任何操作。
要解决您的问题,您必须在my.ini
部分下方的[mysqld]
中增加innodb_log_file_size选项的值。其默认值为48M
。将其设置为
[mysqld]
innodb_log_file_size=256M
在我的案例中有所帮助。
更改do this safely的innodb_log_file_size
值时要小心:
- 您需要干净地正常关闭服务器。
- 离开 (不要删除)日志文件,名为ib_logfile0, ib_logfile1,依此类推。
- 检查错误日志以确保没有 问题关闭。
- 然后重新启动服务器并查看错误日志 输出仔细。您应该看到InnoDB打印消息说明了 日志文件不存在。它将创建新的然后开始。
- 在这 您可以验证InnoDB是否正常工作,然后您可以删除 旧的日志文件。
醇>
答案 1 :(得分:1)
对于那些无法在XAMPP中找到它的人:
起初,我找不到正确的文件来编辑innodb_log_file_size
实际文件:xampp/mysql/bin/my.ini
答案 2 :(得分:0)
只需在以下位置导航:xampp \ mysql \ bin \ my.ini,然后尝试将innodb_log_file_size的大小更改为256 MB