一尘不染

错误1118(42000)行大小太大

sql

我知道这个问题已经被问过很多次了,但是似乎没有一个是我所看到的相同的问题。

给我带来问题的表只有两列:第一个字段是整数,第二个字段是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。

谁能提供为什么发生这种情况的见解?或者,我该如何解决呢?

提前致谢!


阅读 185

收藏
2021-03-10

共1个答案

一尘不染

检查innodb_log_file_size设置是否足够大-是表中各行中找到的最大BLOB数据大小的10倍以及其他可变长度字段的长度。

以下是来自MySQL
5.6发行说明的内容

InnoDB注意事项

  • 重要更改 :对于大型的,外部存储的BLOB字段,重做日志写入操作可能会覆盖最新的检查点。5.6.20补丁程序将BLOB写入的重做日志大小限制为重做日志文件大小的10%。5.7.5补丁解决了该错误,没有施加任何限制。对于MySQL 5.5,该错误仍然是已知的限制。

由于针对MySQL
5.6引入了重做日志BLOB写限制,因此应将innodb_log_file_size设置为大于表行中找到的最大BLOB数据大小加上其他可变长度字段(VARCHAR,VARBINARY)的长度的10倍的值。和TEXT类型字段)。
否则可能会导致“尺寸过大”错误
。如果您的innodb_log_file_size设置已经足够大或您的表不包含BLOB数据,则无需采取任何措施。(缺陷#16963396,错误#19030353,错误#69477)

2021-03-10