工作总结

手上的活终于忙完了,所以准备写一下工作总结,记录一下目前遇到的问题,以及相应的解决方法。

内容

首先说一下目前的工作内容吧,其实跟在学校学的关系不是很大,目前做的是内容采集,具体的就不说了。
我上手的两个论坛,一个是死的,一个是活的,死的论坛我用python随便爬爬就获取到了,然后活的论坛本来是想用python采集的,毕竟比较熟悉,但是不是很清楚该怎么更新数据—持续化采集。

后来大哥说用puppeteer+kafka+minio进行采集,三个词我一个不认识。
幸亏时间比较充足,所以简单的了解了一下就上手去做了,在公司明白的一个内容就是,不一定需要你了解原理,你只需要会用就行了,我kafka和minio直接看的文档,复制的。用起来还可以,但是让我布服务器的话,我是不行的。

问题

1.mysql存储不了xF0x9Fx98x8A

err: ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: Incorrect string value: '\xF0\x9F\x98\x8A' for column 'content' at row 1
这个其实一开始很迷,不知道为啥会出这个错,后来发现是因为表情存不进去。。。但是自己试了一下,表情是可以存进mysql的。

解决方法是打印了一下html,发现表情的位置被黑问号替代了,被�这个符号替代了。然后就存不进mysql了,疯狂尝试都没有找到结果,后来找到了这个帖子才解决。https://stackoverflow.com/questions/65175881/puppeteer-failed-to-render-emojis-when-running-in-ubuntu貌似是因为字体不支持,安装一下支持表情的字体,就可以发现能采集到表情了。

1
apt install fonts-noto-color-emoji

2.mysql断开连接,The server closed the connection

mysql断开连接
这个是真的没有想到,原因大概是因为数据库连接超时,貌似是因为数据库有一个最大连接时间,超过这个时间就会断开,然后我这边数据其实是在启动的时候开启一边数据库,然后就等着kafka生产消费了,不会再次连接数据库,真的让我很困扰。

当时觉得应该可以的一个方法就是我这边设置一个循环,一直去找数据库查询一下数据,随便整个就行了,保持活跃,当时觉得可行,但是因为我这边出现问题,就没有尝试,后来仔细想想,应该是不行的,因为我这边数据其实是一直在往数据库写的,并且调用的是连接数据库,然后执行sql。

后来找到了一个pool,数据库连接池,这个是让我觉得真的可行的方法,并且现在我就用上了,不知道会不会出错。
https://github.com/mysqljs/mysql这个可以看一下GitHub的文档,有比较详细的内容,当然如果需要中文的话,https://www.cnblogs.com/enix/p/3654894.html推荐这一篇。

3.mysql连接池卡死

这个就没有报错了,直接卡进程里,就是啥报错也没有,但是就是不往下进行了,这个真的很迷,后来突然想到了大哥跟我说的一句话,“你这个把释放放在了调用前面,可能会拿不到数据吧”这一句话让我想起来我好像只给成功执行sql语句的连接加了释放,如果出错的话,貌似不会释放连接,然后再一想,好像出现卡死的都是有报错的。所以给出现错误的也加上释放应该就可以了。

4.Linux更换node版本

虽然说是这些问题都不是node的问题(大概),但是我还是决定换一下node版本,更换成我本机上的node–14.15.0好像,更换成这个版本。
因为我依稀记得当时装node是先去下载一个Linux版本的,然后解压,之后link就行了,但是自己试了一下发现不行(这是因为我当时用n 更新了一下node,所以就不行了,方法应该大概是可行的)

然后查了好多都没整好,后来想起来我更新版本用的n,这个好像大概也可能会降级吧。
查了一下发现真的可以,n xxxxx就行了,n 版本号就会下载对应版本的node了,n怎么安装?npm install n -g,-g是为了全局能够使用(大概是这样的)

5.minio上传失败S3Error: The provided ‘x-amz-content-sha256’ header does

反正具体的报错我就不写了,这是因为minio上传的时候,图片不在当前位置,加个延时就行了,本来我是这边下载了马上就上传,但是服务器出现了种种问题没有下载成功,然后这边就上传,就会出现这个问题。

6.node传表情到MySQL

这个问题是真的折磨人啊,但是最后还是想到了,问题出现在node连接数据库的编码格式上,我们把编码格式设置成utf8mb4即可,太难了,真没想到是这样的问题,一直以为编码这个东西只需要设置数据库就行了,在写这点内容的时候,突然就想到以前用python的时候,连接数据库也是要设置编码的,太难以置信了,我真。。
https://stackoverflow.com/questions/64737590/character-encoding-issue-node-js-mysql
https://stackoverflow.com/questions/20411440/incorrect-string-value-xf0-x9f-x8e-xb6-xf0-x9f-mysql最后是靠这两篇文章让我想起来还有编码格式这个东西的,感谢!!

7.一些补充

首先就是用puppeteer的时候,记得每一个page用完都要关闭,如果想要达到最好的效果,最好是关闭launch,然后再次启动。

然后再就是node 使用moment模块转化时间的时候,记得要用大写的HH表示24小时制。这一点是真的坑啊,我还以为不加后面的a这个参数就是24加了就是12呢,太坑了,写数据的时候看怎么下午2点写的凌晨2点。
moment(values.data).format('YYYY-MM-DD HH:mm:ss')-----24小时

moment(values.data).format('YYYY-MM-DD hh:mm:ss')-----12小时


然后就简单写到这里吧,有好多错误其实都忘记了。想到再补。

作者

datehoer

发布于

2022-01-06

更新于

2023-10-19

许可协议

评论