专题描述 | Ecbil项目应用程序连接数据库异常断开问题的分析过程、诊断方法和解决方法。 | ||||
问题现象 | 1 | 远程桌面服务器连接数据库异常,应用程序连接数据库异常。 | |||
数据库服务端执行FLUSH HOSTS 或 mysqld服务重启,能短暂解决应用端连接不上,大约运营30分钟后继续出现连接不上。 | |||||
2 | 应用程序访问数据库报错信息摘要:access denied和host is blocked。 | ||||
3 | 机器参数配置、错误日志、系统tcp连接等相关因素无特别。 | ||||
分析过程 | 1 | 检查数据库参数配置、错误日志、系统tcp连接数量,排除因数据库系统参数导致的连接异常问题。 | |||
2 | 根据host is blocked错误信息得出:存在连续超过max_connect_errors=99999次数的异常连接。 | ||||
数据库服务端error日志文件,只有不超过30条连接异常断开或包读错误的日志数据。 | |||||
3 | 在远程桌面服务器定位对CPU占用率较高的程序,关闭该程序进程之后,数据库flush hosts过了一段时间以后,应用连接异常,说明问题原因和该程序无关。 | ||||
4 | 抓包的方式确认应用程序是否访问访问数据库不合理,对抓取的包分析可排除应用程序对数据库访问操作存在不合理的地方。 | ||||
5 | 怀疑是其他应用程序占用该mysqld服务实例的端口,但更改数据库服务的端口配置后半小时依旧出现问题。 | ||||
6 | 猜测数据库服务实例域名对应的VIP存在重复,且研发团队确认只有应用连接,则进行数据库服务器VIP禁用,启动应用程序能够连接上,证实有相同IP存在。 | ||||
知识点 | 1 | 出现大量的异常连接或读包错误信息,往往是因为网络问题或应用程序未正常关闭连接造成的。 | |||
2 | 防止出现异常连接信息多而导致客户端主机IP被拒绝,建议max_connect_errors=99999。 | ||||
3 | 客户端出现报错access denied和host is blocked,则建议执行FLUSH TABLES解决,同时跟进网络问题和应用程序未正常关闭数据库连接。 |
转载于:https://blog.51cto.com/yixianwei/1902834