一个 yum update 引发的错误
初遇线上崩溃
上个星期,小编坐在电脑面前,有点无聊,突然想到docker这个容器还是挺好用的,由于微服务的兴起,docker技术也变得火爆起来,docker作为一种容器技术主要用来替代虚拟机作为应用部署的解决方案,然后我就在putty上操作安装docker,当输入yum update之后,newbee_mall直接蹦了。
关于Docker的简介
1.镜像
docker镜像是一个特殊的文件系统,能够提供容器运行时所需的资源。如果接触过dockerfile的同学应该知道,我们构建镜像时都会选择一个基础镜像,这说明docker镜像是一层层进行构建的,一个镜像往往由多层文件系统组成。
2.容器
镜像是静态的,镜像运行起来的时候就变成了容器。容器相当于一个完整的操作系统,他可以有自己的文件系统,自己的网络配置。假如我们使用一个mysql容器进行存储数据,这时数据会存储在当前容器的存储层,存储层的生命周期和容器一样,容器消亡时,其存储层也不在了,所以我们在使用这种需要存储数据的容器时,往往都需要指定数据卷Volume(挂载一个宿主机的文件目录),这样即使容器删除,数据也不会消失。
3.仓库
顾名思义,docker仓库即为存储镜像的地方,我们可以将镜像上传至仓库,也可以从仓库下载镜像。这个比较简单,没什么好说的。
这里就不详细介绍docker,直接上连接docker介绍
开始操作 yum update(出现问题)
小编直接在网上找了篇博客Docker安装,用putty连上自己的centos7 ,然后,我没注意看,直接yum update,升级了centos7的核心和系统架构,然后我发现newbee_mall 这个项目访问不了了,当时我的内心慌得一批,我第一次遇到这种线上问题,头脑里毫无头绪,想google都不知道从哪个地方开始。
快速定位问题
我第一时间去tomcat中的webapps中查看项目,发现项目已经没有了,然后我以为是项目没有了,又传了一份war包到webapps里面,但是项目依旧没有起来,这个时候我开始仔细查看异常信息,以及查看tomcatlog信息(见下图)。异常信息描述的是连接数据库进行查询的时候出来问题,也有可能是mapper文件写错了、没有加载mapper文件。我在本地跑了一遍,将mapper文件仔细检查了一遍,没有找到问题,这个时候,我打开navicat连接数据库,结果直接连接失败(2003),到这我才意识到是MySQL出了问题。然后我进入putty,直接mysql -uroot -p 输入密码,居然进不去,这波操作让我想起了之前7.31号那次,数据库被黑客黑了,这次故居又是被黑了,至此才找出问题出在数据库。
解决问题
我修改my.cnf 文件,在最后面加入了一行命令(skip-grant-tables),跳过密码登录,然后进去发现MySQL里面的数据全都没有了,这个时候我果断卸载数据库,修改数据库密码、端口号(后来还是使用3306),然后将重新将数据库恢复过来。又在IDEA中将数据库密码修改成最新的,然后 maven clean、maven compile、maven package 找到生成war包的位置,将war包上传到tomcat下的webapps文件夹下,然后newbee_mall 又重新可以访问了。
nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException:
Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException:
hikariCP - Connection is not available, request timed out after 30000ms. ### The error may exist
in file [/usr/local/tomcat1/webapps/ROOT/WEB-INF/classes/mapper/GoodsCategoryMapper.xml] ### The
error may involve ltd.newbee.mall.dao.GoodsCategoryMapper.selectByLevelAndParentIdsAndNumber ###
The error occurred while executing a query ### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException:
Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: hikariCP - Connection
is not available, request timed out after 30000ms.
总结
1、以后不管做什么,都需要先了解这一步是干嘛的,为什么要这样做,这样做有什么后果,清楚了这些你在去执行相应的操作。
2、当出现问题的时候,首先查看log信息和异常信息,快速定位出现问题的模块,然后选择有效的方法去解决,最后思考总结怎么避免下次再遇到类似的问题
3、所以平常小伙伴需要做好数据库的备份,了解一些网络安全相关的知识