记录一次关于数据库配置导致的异常

在一个风和日丽的下午,接到客户反馈,数据查不到了,页面卡死,后台报错

 根据本人初步判断应该是客户进行了大批量的发送导致数据库连接池连接数不够用导致的,先查询nacos的druid配置:

看上去没啥问题,再看看数据库的最大连接数,发现只给了20.。。。。修改为1000(运维老哥感觉1000应该差不多)。

-- mysql服务器端和客户端在一次传送数据包的过程当中最大允许的数据包大小
show VARIABLES like '%max_allowed_packet%';

show variables like '%max_connections%';

-- 数据库表是否支持分区
show variables like '%partition%';

-- 查询输出表的详细信息
show table status like 'svr_sms_msg_detail';

-- 查询单个库中所有表磁盘占用大小
select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
where table_schema='produce_center'
order by data_length desc, index_length desc;


 修改连接数后,使用压力测试发现问题依然存在。。。。。同时发现rocketmq居然有报错:

 仔细看发现有个system busy,这是不科学的啊(总共才十万左右)让运维老哥检查一下服务器,发现所有服务和中间件全部部在一个服务器上。。。(0_0)

然后运维大哥对服务器进行扩容啊啥的一顿操作,再次压测system busy发现没有了,但是数据库的那个还在(内心emo了)。。。然后就开始一顿百度,查到如下。

Communications link failure:The last packet successfully received from the server was 0 millisecond

最后加上了如下配置:

在/etc/my.cnf文件中[mysqld]部分增加,然后重启mysql

  max_connections=1000 //最大连接数

  wait_timeout=31536000 //负责超时控制的变量,默认8个小时,就是说MySQL的服务会在操作间隔8小时后断开,需要再次重连(这也是为啥上线前压测没问题吧。)使用autoReconnect=true来使得连接自动恢复,MySQL4及其以下版本适用。MySQL5中已经无效了,必须调整系统变量来控制了。

  interactive_timeout=31536000//服务器关闭交互式连接前等待活动的秒数

  net_read_timeout=6000

  net_write_timeout=6000

  max_allowed_packet=1G//一个数据包 

nacos的url:

autoReconnect=true&failOverReadOnly=false&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&testOnBorrow=true

再次测试问题完美解决!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值