我知道这个问题已经被问过很多次了,但是似乎没有一个是我所看到的相同的问题。
给我带来问题的表只有两列:第一个字段是整数,第二个字段是longtext。这是来自MySQL 5.5.30的转储文件的一部分:
1 - MySQL dump 10.13 Distrib 5.5.30, for Linux (x86_64) 2 -- 3 -- Host: localhost Database: mydatabasename 4 -- ------------------------------------------------------ 5 -- Server version 5.5.30-log 32 DROP TABLE IF EXISTS `large_file`; 33 /*!40101 SET @saved_cs_client = @@character_set_client */; 34 /*!40101 SET character_set_client = utf8 */; 35 CREATE TABLE `large_file` ( 36 `id` int(11) NOT NULL AUTO_INCREMENT, 37 `data` longtext, 38 PRIMARY KEY (`id`) 39 ) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=latin1; 40 /*!40101 SET character_set_client = @saved_cs_client */; 43 -- Dumping data for table `large_file` 44 -- 45 46 LOCK TABLES `large_file` WRITE; 47 /*!40000 ALTER TABLE `large_file` DISABLE KEYS */; 48 INSERT INTO `large_file` VALUES(38,'GyUtMTIzNDVYQ... <large data> ...); 49 /*!40000 ALTER TABLE `large_file` ENABLE KEYS */; 50 UNLOCK TABLES;
如您所见,此转储文件来自MySQL 5.5.30,我可以将此数据导入5.5.30。但是,当我尝试导入5.6.x时,出现 错误1118(42000)行大小太大的 错误。
进入large_file表的数据很大(相对),值的范围从15 MB到大约25 MB。数据全部为ASCII(以64为基数编码)。
其他海报的列数非常多,但此表中只有两列。
长文本类型应该能够存储大约4 GB,对于5.5.30就是这种情况,但是我发现很难迁移到5.6.x。
谁能提供为什么发生这种情况的见解?或者,我该如何解决呢?
提前致谢!
检查innodb_log_file_size设置是否足够大-是表中各行中找到的最大BLOB数据大小的10倍以及其他可变长度字段的长度。
以下是来自MySQL 5.6发行说明的内容
InnoDB注意事项
由于针对MySQL 5.6引入了重做日志BLOB写限制,因此应将innodb_log_file_size设置为大于表行中找到的最大BLOB数据大小加上其他可变长度字段(VARCHAR,VARBINARY)的长度的10倍的值。和TEXT类型字段)。 否则可能会导致“尺寸过大”错误 。如果您的innodb_log_file_size设置已经足够大或您的表不包含BLOB数据,则无需采取任何措施。(缺陷#16963396,错误#19030353,错误#69477)