ERROR 1118(42000)行大小太大

时间:2014-08-06 14:53:45

标签: mysql 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时,我得到 ERROR 1118(42000)行大小太大错误。

进入large_file表的数据(相对)很大,值的大小范围从15 MB到大约25 MB。数据全部是ASCII(基本编码64)。

其他海报存在大量列的问题,但此表中只有两列。

longtext类型应该能够存储大约4 GB,5.5.30就是这种情况,但我发现迁移到5.6.x很困难。

任何人都可以提供有关为何发生这种情况的见解吗?或者,我如何解决它?

提前致谢!

5 个答案:

答案 0 :(得分:9)

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

以下内容来自MySQL 5.6 Release Notes

InnoDB Notes

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

    由于为MySQL 5.6引入了重做日志BLOB写入限制,innodb_log_file_size应设置为大于表格行中找到的最大BLOB数据大小的10倍加上其他可变长度字段长度的值( VARCHAR,VARBINARY和TEXT类型字段)。 如果不这样做可能会导致“行大小太大”错误 。如果您的innodb_log_file_size设置已足够大或您的表不包含BLOB数据,则无需任何操作。 (Bug#16963396,Bug#19030353,Bug#69477)

答案 1 :(得分:6)

我在MYSQL 5.7(OSX 10.11)中遇到了这个问题。

以下工作虽然可能不太理想。

Template.myTemplate.helpers( first_func(){ return myFunction(); }, second_func(){ return myFunction(); } ); function myFunction(){ return "Hello" } 添加:

my.cfn

答案 2 :(得分:2)

导致从5.5到5.6.22导入BLOB数据的相同问题,其中blob是aprox:最大70MB。然而,虽然增加了innodb_log_file_size,但在我的情况下,我不得不将其增加到10GB(我尝试从1GB开始增加1GB),这是最大BLOB大小的10倍。

答案 3 :(得分:2)

ERROR 1118 (42000) at line 1852: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.
[mysqld]
innodb_log_file_size = 512M
innodb_strict_mode = 0

ubuntu 16.04 edit path : nano /etc/mysql/mysql.conf.d/mysqld.cnf

工作!! ...

Click To Document

答案 4 :(得分:0)

如果启用了 InnoDB 严格模式,则会显示此错误。

SET GLOBAL innodb_strict_mode=OFF;

更多详情Read

相关问题