admin管理员组文章数量:1446759
[MYSQL] 导个数据也能遇到一堆坑 ERROR 1118 (42000) ERROR 2013 Out of memory
导读
最近遇到一个数据导入的坑, 只是简单的把生产数据恢复到测试(mysqldump)
第一阶段
使用 mysql < xxxx.sql 导入数据, 然后遇到报错如下:
代码语言:txt复制ERROR 1118 (42000) at line xxxxx: 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
这个报错很简单, 就是字段太多了, 导致行长度超过了8126. 官方要求每页能存放至少2条数据, 即每条数据最长为PAGE_SIZE的一半.
The maximum row size, excluding any variable-length columns that are stored off-page, is slightly less than half of a page for 4KB, 8KB, 16KB, and 32KB page sizes. For example, the maximum row size for the default innodb_page_size of 16KB is about 8000 bytes. However, for an InnoDB page size of 64KB, the maximum row size is approximately 16000 bytes. LONGBLOB and LONGTEXT columns must be less than 4GB, and the total row size, including BLOB and TEXT columns, must be less than 4GB.
解决方案也比较简单, 要么把字段调小一点, 要么关闭严格模式
代码语言:sql复制set global innodb_strict_mode=off;
那生产是怎么建表成功的呢? 不会也是关闭严格模式吧. 已经无法考证了.
第二阶段
在关闭严格模式之后, 表创建成功了. 但是又报错
代码语言:txt复制ERROR 2013 (HY000): Lost connection to MySQL server during query
导个数据而已, 连接咋还断开了呢? 咨询了甲方大佬后, 发现是因为挂载的nas网络不稳定导致的, 其实也不是第一次遇到这个问题了.
解决办法也比较简单, 就是把nas上的sql文件拷贝到本地来, 这样就不存在网络问题了.
第三阶段
把sql文件拷贝到本地之后, 再次导入数据, 又遇到了第二阶段的报错.
代码语言:txt复制ERROR 2013 (HY000): Lost connection to MySQL server during query
连接又断开了, 本地数据导入应该不存在网络问题啊. 检查日志发现mysql有启动记录, 但未找到对应的关闭记录, 也就是mysqld被kill了, 谁去kill它呢? 查看/var/log/messages
发现了OOM
Mar 14 16:19:56 XXX kernel: Out of memory: Kill process 3140 (mysqld) score 728 or sacrifice child
啊? 为啥会OOM啊, 这可是mysql单独的服务器啊, 检查参数发现 innodb_buffer_pool_size是实际内存的2倍. 这就很秀了! (其它同事发现的这个参数问题)
重新设置innodb_buffer_pool_size之后数据导入正常了.
本文标签: MYSQL 导个数据也能遇到一堆坑 ERROR 1118 (42000)ERROR 2013Out of memory
版权声明:本文标题:[MYSQL] 导个数据也能遇到一堆坑 ERROR 1118 (42000)ERROR 2013Out of memory 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1748289816a2839057.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论