
八爪鱼采集,数据库常见问题
在日常使用八爪鱼导出数据到数据库的时候,可能会遇到一些奇奇怪怪的问题,一开始我也一脸懵逼,不过慢慢研究之后,其实大多数问题都有规律可循啦。这次我就把遇到过的各种连接失败、导入报错的情况给大家盘一遍,顺便告诉你对应怎么处理,保证能帮到你!
八爪鱼采集器官方链接:https://affiliate.bazhuayu.com/7hypDr
一、连接数据库常见问题
1. 无法连接,提示Keyword not supported,参数名:!!!Charset
如果连接数据库的时候,弹出这个提示,基本上就是密码设置的问题了,尤其是密码里夹杂了一些特别奇葩的特殊符号。
解决办法也很简单:
把数据库的密码换成只包含字母和数字的组合,别搞奇奇怪怪的符号,八九不离十就能连上了。
2. 连接MySQL报错:Client does not support authentication protocol requested by server
这种情况啊,通常是因为你的MySQL升级到8.0以上了,验证方式变了,老版本客户端不认识新的认证协议,所以连不上。
解决办法也不复杂:
打开MySQL命令行窗口,登录进去。
输入这条命令:
sqlALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码';
然后再执行:
sqlFLUSH PRIVILEGES;
就搞定了。记得把密码换成你想设的新密码哈,不要直接复制示例里的。
二、导入数据库常见问题
1. 提示:Invalid column type from bcp client for colid x
这个错误通常是数据表中某个字段长度不够了,比如你抓到了特别长的一段文字,而数据库定义的字段只有255长度,自然就塞不进去啦。
解决办法:
- 打开数据库,把出问题的字段长度加大,比如varchar(255)改成varchar(1255),
- 如果还不够,干脆改成longtext类型,彻底解决。
2. 导出数据提示:"max_allowed_packet"相关
如果你看到这个提示,多半是MySQL设置的包大小太小,超出了限制。
调整方法有两种:
改配置文件(my.ini或者my.cnf),在[mysqld]段加上:
max_allowed_packet = 20M
然后重启MySQL服务。
直接命令行修改:
sqlset global max_allowed_packet = 20*1024*1024;
这两种方法都可以,让MySQL能接收更大的数据包。
3. 导出数据时报错:Incorrect string value(涉及emoji表情)
如果日志里提示了"Incorrect string value",又提到了某个字段,基本就是因为数据里面出现了emoji表情(比如小笑脸、小肌肉那种),而你的数据库用的是utf8编码,最多支持3字节,emoji需要4字节,自然就崩了。
正确的做法:
- 把数据库字符集从utf8改成utf8mb4,
- 同时也要把数据表和字段的编码都换成utf8mb4。
这样就能完美支持emoji了。
4. 报错:Cannot enqueue Query after fatal error
这个错误挺常见的,基本上是因为每批次导出的数据太大,数据库扛不住直接挂了。
解决办法:
- 把每批导出的条数调小,比如从默认的1000条,改成100条或者10条,
- 如果问题还存在,那就是数据库本身有点虚,可以参考这个链接调整数据库参数:优化方法参考
5. 导出时报错:read ECONNRESET(网络问题)
这个其实是网络连接中断导致的,特别是批量导出数据量很大的时候。
解决办法:
- 把每批导出的数量控制在2000条以内,甚至1000、100、10条去测试,
- 另外,去IE浏览器的【Internet选项】-【局域网设置】里,把【自动检测设置】的勾去掉。
这样通常就不会再掉线了。
6. 手动导出正常,定时导出报错:Cannot enqueue Query after fatal error
这个情况比较特殊,手动导出没问题,定时入库就报错,大概率是因为数据库字段设置了NOT NULL
,但是导入的数据里对应字段是空的。
处理方法:
- 去数据库,把相关字段的
NOT NULL
限制取消掉,允许它为空,就能顺利入库了。
我的感觉是
其实吧,大多数导出失败或者连接异常的问题,归根结底就是数据库配置小细节没注意,或者数据本身格式有问题。八爪鱼这边功能很稳定了,基本上只要按照这些方法去调整,90%的问题都能很快搞定。如果实在遇到奇葩bug,我的建议是,别硬怼,换个思路,比如调小批次量,改字符集什么的,效果真的比死磕好多了!
总之啦,只要掌握了这些常见问题的解决办法,不管是手动导出还是自动定时导出,都会顺顺利利,很丝滑的!