场景:一台服务器 需要连接远方的mysql数据库。
使用的是 mysql.data.dll 版本为 6.9.9。
奇怪的是 在服务器中安装 Navicat for MySQL 是可以连接数据库的。
导致:经常性无法连接mysql库。
1.远程主机强迫关闭了一个现在的连接。
2.无法从传输连接中读取数据。
3.由于远程方已关闭传输流,身份验证失败。
解决: 换成 MySql.Data.dll 为 6.6.5
查资料:
1.保证网络正常(跨机房专线稳定性不可控,有人摇晃光纤玩 o(∩_∩)o 或者其他原因导致流量堵塞)
2.容易卡的数据库连接分离出去到单独的进程。这样由于不共享锁,所以不会卡住其他线程池的使用和创建。
3.需要跨机房的业务,在数据所在机房单独提供api,内网失效时可以走外网。
4.容易卡住的线程池连接字符串中设置minPoolSize=0。这样创建连接池时,不预创建连接而影响其他连接池。但是,对于突发流量增长的情况,响应可能不够及时。
5.设置一个合理的ConnectionTimeout。可以有效避免连接创建时卡住,导致api无响应和其他副作用。
网友评论