mysqlimport导入报错的排查(r10笔记第58天)

今天有个同事问我一个mysqlimport导入的问题,看起来还是蛮奇怪的。同事在客户端导入一个文件。文件大小是2.8G,然后报错mysqlimport: Error: 2013, Lost connection to MySQL server during query 对于这个问题我的第一感觉是一台云服务器,是不是没有配置swap造成的原因,因为在之前的一次迁移中,被这类问题折磨坏了,遭遇了OOM-Killer的问题,最后发现是swap没有配置导致的。 但是同事经过确认,这是一台实体机,而且查看硬件情况,配置还不错。buffer_pool_size有50多G,swap也配置了。看来这个问题的原因初步排除了。 对于这个问题,网络上也有很多种说法。有的说是max_allowed_packets导致。查看当前的配置是1G,看起来是比导入文件小了。 不过从Oracle中的经验来看,似乎这个说法也不是完全靠得住的,如果我导入一个100G的dump,那这个参数还要配置超过100G,好像听起来也不大合理啊。而且也没见过有环境配置一个极高的值。 为此我做了几个简单的测试。 首先找了一个测试环境,max_allowed_packets为30多M. # mysqladmin var|grep max_all | max_allowed_packet | 33554432 | slave_max_allowed_packet | 1073741824 锁定了一个小表. ]> select count(*)from t_fund_info; +----------+ | count(*) | +----------+ | 1998067 | 通过查看文件大小,大概是400多M. -rw-rw---- 1 mysql mysql 482344960 Oct 13 16:01 t_fund_info.ibd 这样就可以轻松模拟测试max_allowed_packets的场景了。 首先导出文件。 > select * from t_fund_info into outfile '/tmp/t_fund_info.txt'; Query OK, 1998067 rows affected (6.82 sec) 导出的文本文件有近300M ll t_fund_info.txt -rw-rw-rw- 1 mysql mysql 291963062 Oct 20 22:25 t_fund_info.txt 然后使用最简单的命令来导入: mysqlimport test '/tmp/t_fund_info.txt' 短暂的等待之后,成功导入。 可以看到慢日志的输出如下: # Time: 161020 22:31:49 # User@Host: root[root] @ localhost [] # Thread_id: 4321910 Schema: test Last_errno: 0 Killed: 0 # Query_time: 92.866443 Lock_time: 0.000074 Rows_sent: 0 Rows_examined: 0 Rows_affected: 1998067 Rows_read: 0 # Bytes_sent: 68 SET timestamp=1476973909; LOAD DATA INFILE '/tmp/t_fund_info.txt' INTO TABLE `t_fund_info` IGNORE 0 LINES; 原来mysqlimport会转换为load data 的形式。 然后delete,truncate,drop重建,都可以成功导入。 是哪里测试的不到位吗,我开始审视这个问题,我们可以在测试环境中模拟这个问题,以当时出问题的数据为准。然后查看同事提供的日志和截图,发现当时使用的命令是 mysqlimport test '/tmp/t_charextra.txt' --local --delete --default-character=gbk 这个表的字符集经过确认是latin,所以就在怀疑是不是因为字符集转换造成的。 ENGINE=InnoDB DEFAULT CHARSET=latin1 但是短暂的等待之后,还是可以成功导入。 # mysqlimport test '/tmp/t_charextra.txt' --local --delete --default-character=gbk test.t_charextra: Records: 480174 Deleted: 0 Skipped: 0 Warnings: 0 在表t_charextra存在大量数据的前提下,我们继续尝试上面的方法导入。 整个导入就会分为两部分, SET timestamp=1476975647; DELETE FROM t_charextra SET timestamp=1476975748; LOAD DATA LOCAL INFILE '/tmp/t_charextra.txt' INTO TABLE `t_charextra` IGNORE 0 LINES; 还是能够成功导入 # mysqlimport test '/tmp/t_charextra.txt' --local --delete --default-character=gbk test.t_charextra: Records: 480174 Deleted: 0 Skipped: 0 Warnings: 0 是哪里测试的不到位吗,现在唯一能够想到的就是两点,一是通过客户端调用,而是客户端和服务端的网络延迟较大。 配置了客户端用户,把导出的文本拷贝到客户端来复现问题。 > grant select,insert,delete on test.* to testdb@10.127.133.86 identified by 'mysqlnew'; Query OK, 0 rows affected (0.02 sec) 然后使用下面的命令来尝试客户端导入。 # mysqlimport -h 10.127.xxxx -utestdb -pmysqlnew test '/U01/t_charextra.txt' --local --delete --default-character=gbk Warning: Using unique option prefix default-character instead of default-character-set is deprecated and will be removed in a future release. Please use the full name instead. test.t_charextra: Records: 480174 Deleted: 0 Skipped: 0 Warnings: 0 从日志看除了抛出一个警告外,一切都很正常,所以现在的重点就落在了网络上,这一点还是需要进一步确认,不过目前来看已经排除了不少原因,想必原因也快揭晓了。问题背后的原因也会在确认之后进行更多的论证和分析,敬请期待。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2016-10-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Guangdong Qi

ios 未能找到使用指定主机名的服务器原因之一

4722
来自专栏文渊之博

SQL Server内存

背景 最近一个客户找到我说是所有的SQL Server 服务器的内存都被用光了,然后截图给我看了一台服务器的任务管理器。如图 ? 这里要说明一下任务管理器不会完...

3207
来自专栏liuchengxu

在 Golang 开发中使用 Makefile

使用 Golang 已经有一阵了,在 Golang 的开发过程中,我已经习惯于不断重复地手动执行 go build 和 go test 这两个命令. 不过,现...

1331
来自专栏PingCAP的专栏

TiDB 2.1 GA Release Notes

2018 年 11 月 30 日,TiDB 发布 2.1 GA 版。相比 2.0 版本,该版本对系统稳定性、性能、兼容性、易用性做了大量改进。

1390
来自专栏数据和云

腾讯游戏DBA利刃 - SQL审核工具介绍

作者介绍 ? 韩全安(willhan) 华中科技大学,硕士,现代数据库方向。2013年毕业,就职于腾讯到今,工作项目:TMySQL、SQL审核、InnoDB列压...

1.1K6
来自专栏极客慕白的成长之路

数据库系统概述必背知识点整理

1332
来自专栏乐沙弥的世界

Oracle Time Model Statistics(时间模型统计)

下图为 DB Time in Overall User Response Time

1032
来自专栏MYSQL轻松学

MySQL层相关优化

1.1、关于版本选择 官方版本我们称为ORACLE MySQL,这个没什么好说的,相信绝大多数人会选择它。 Percona分支版本,它是一个相对比较成熟的、优秀...

3848
来自专栏程序猿

MySQL数据库优化小谈,简短。

更新文章的速度跟不上大家的热情了......,青岛的一场大雪,取暖基本靠抖了。 ? 好勒,现在写正经的。对于优化,这片文章我只说大致思路...

3497
来自专栏JMCui

记录一次批量插入的优化历程

1502

扫码关注云+社区

领取腾讯云代金券