有一个广告机项目原本已经完成,但是要跟第三方合作广告..
同事要辞职,工作完全交接给我..
临走的时候重新写了个数据回调的接口.项目部署到新服务器上(我配置了主从同步数据库)
然后过了几天项目开始出现异常..
org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 3000, active 20, maxActive 20, creating 0, runningSqlCount 20 : UPDATE ad_callback SET
就是数据库连接池连接不上..
使用的是阿里的druid连接池,之前没接触过,一脸懵比..
然后我就开始了漫长的解决问题之路..(虽然已经上线)
刚开始看到连接不上, 第一反应是主从数据库的账户出问题了.
赶紧检查一下, 发现没有问题, 但是在检查的过程中倒是弄出了不少问题...(越忙越乱)
重新设置一下账户重启...突然出现启动不了, 因为没有pid文件..
在安装的时候费了不少功夫. 这问题也容易解决.. 但也是需要时间啊..
折腾了许久又把主从数据同步折腾没了
又赶紧按教程重新建立访问用户, 重新同步一下数据库..
最后终于弄好了, 发现仍然是这个问题..
在网上各种查, 有一个思路是连接池泄漏..
(因为对业务和代码不熟悉, 再加上数据库折腾过了, 十分相信应该就是连接池泄漏)
找代码.. 找定位连接池泄漏代码的方法..各种找, 没找到..
阿里有监控后台, 但是同事代码里写的允许的ip是本地.. 项目部署在服务器. 咋访问 ??
基本就是百度上的办法一个一个的试.. 搞了好久..
最后还是求助前同事..
专门把他的代码截图了.. 问他有没有代码哪里写的时候连接没关.. 被注释掉的代码有没有忘了打开..balabala
前同事小哥很果断的说代码不用管.. 重新打包部署一下
重新部署还有异常, 是这个异常:
把异常截图给他后, 开口就问数据库的账户密码和配置文件的对不对..
一再确定账户名密码都对了.. (主从库里的slave表里的数据也一样正确)
又问新建的账户有哪些, 让查一下表..
我的从表里有好几个用户名相同的账户, ip各不一样..(前面折腾数据库的时候建的)
确定问题是自己连接自己数据库出现问题.. (mysql的错误日志里没输出)
把新建的多余的账户都删除, 留下系统的, %, 和主数据库的账户..
重新启动mysql服务..
问题解决....呼~
这样一捋..好像知道问题出在哪了..
当时配置主从数据库的时候修改的my.cnf配置文件是拷别人的
pid的路径是在run目录下面..
每次重启的时候都会清空pid文件.
项目部署上后那几天公司有停电过几次
重启后, 没有pid文件, mysql服务就启动不了, 怎么能连得上呢.
前面我折腾数据库的时候, 每次都是折腾完, 重启一下服务..
最后才发现这个问题.. 唉,都是自己埋的坑..