前几天采集数据折腾着玩,在服务器上卸载了原来的marialdb,重新安装了新版本的mysql,创建数据库,创建账户,授权,然后本地连接、本地跑数,都挺正常。
程序写好之后,代码在本地跑的效率就不乐观,觉得可能是网络的问题,放到服务器上可能会好一些。把代码放服务器上去跑,发现性能有所提升,但是还是不太对,不应该是本地跑数的速度。
看了一下阿里云的后台监控,发现还有内网消耗,忽然想起来,上传代码的时候,代码里写的数据库连接还是IP地址,不是127.0.0.1或者localhost,导致还是走了部分网络。
重新修改配置,打包代码发布到服务器上,启动。访问首页,结果报错,异常信息:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Public Key Retrieval is not allowed,之前没遇到过,但是根据当时自己建库的过程,盲猜是用户配置的问题,当时给用户配置的host是%。
搜索一下网络,发现大家给的解决方案是:
在数据库连接url的后边加上参数: allowPublicKeyRetrieval=true
原因是:如果用户使用了 sha256_password 认证,密码在传输过程中必须使用 TLS 协议保护,但是如果 RSA 公钥不可用,可以使用服务器提供的公钥;可以在连接中通过 ServerRSAPublicKeyFile 指定服务器的 RSA 公钥,或者AllowPublicKeyRetrieval=True参数以允许客户端从服务器获取公钥;但是需要注意的是 AllowPublicKeyRetrieval=True可能会导致恶意的代理通过中间人攻击(MITM)获取到明文密码,所以默认是关闭的,必须显式开启
最终改成:
jdbc:mysql://127.0.0.1:3306/lottery_probability?useSSL=false&allowPublicKeyRetrieval=true
再发布,启动,OK,并且执行速度提升了好几倍,这才是应该有的速度。不过即使这样,也需要跑几个小时。。。等着吧
近期评论