Gre*_*eys 7 mysql django innodb django-mailer
我从django应用程序中转储了一个正在运行的生产数据库,并尝试将其迁移到我的本地开发环境.生产服务器运行MySQL 5.1,本地我运行5.6.
在迁移django-mailer的"messagelog"表时,我遇到了可怕的错误1118:
ERROR 1118 (42000) at line 2226: 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.
我在网上看到了很多关于这个错误的东西,但没有一个能解决我的问题.
注意:此错误不是来自表的创建,而是来自插入具有相当大数据的行.
笔记:
该表没有很多列.架构如下:
+----------------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| message_data | longtext | NO | | NULL | |
| when_added | datetime | NO | | NULL | |
| priority | varchar(1) | NO | | NULL | |
| when_attempted | datetime | NO | | NULL | |
| result | varchar(1) | NO | | NULL | |
| log_message | longtext | NO | | NULL | |
+----------------+------------+------+-----+---------+----------------+
同样,只有当我尝试插入一个非常大的(message_data大约5兆字节)行时才会发生错误; 创建表工作正常,在失败之前添加大约500,000行.
我没有想法; 我尝试过DYANMIC和COMPRESSED行格式,并且我检查了相关innodb变量的值:
mysql> show variables like "%innodb_file%";
+--------------------------+-----------+
| Variable_name | Value |
+--------------------------+-----------+
| innodb_file_format | Barracuda |
| innodb_file_format_check | ON |
| innodb_file_format_max | Barracuda |
| innodb_file_per_table | ON |
+--------------------------+-----------+
创建代码(来自SHOW CREATE TABLE)看起来像:
CREATE TABLE `mailer_messagelog` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`message_data` longtext NOT NULL,
`when_added` datetime NOT NULL,
`priority` varchar(1) NOT NULL,
`when_attempted` datetime NOT NULL,
`result` varchar(1) NOT NULL,
`log_message` longtext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=869906 DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC
kla*_*ske 19
根据这个问题的答案之一,您的问题可能是由MySQL 5.6中的更改引起的(请参阅http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-上的InnoDB说明)6-20.html):
InnoDB备注
重要更改:对于大型外部存储的BLOB字段,重做日志写入可能会覆盖最近的检查点.5.6.20补丁将重做日志BLOB写入的大小限制为重做日志文件大小的10%.5.7.5补丁解决了bug而没有施加限制.对于MySQL 5.5,该bug仍然是一个已知的限制.
由于为MySQL 5.6引入了重做日志BLOB写入限制,innodb_log_file_size设置应该比表中行中找到的最大BLOB数据大小加上其他可变长度字段的长度(VARCHAR,VARBINARY和TEXT类型字段).如果您的innodb_log_file_size设置已足够大或您的表不包含BLOB数据,则无需任何操作.
注意在MySQL 5.6.22中,重做日志BLOB写入限制放宽到总重做日志大小的10%(innodb_log_file_size*innodb_log_files_in_group).
(Bug#16963396,Bug#19030353,Bug#69477)
如果你换成innodb_log_file_size50M以上的东西会有帮助吗?(更改该变量需要一些步骤才能正常工作:
| 归档时间: |
|
| 查看次数: |
19067 次 |
| 最近记录: |