下面对常见的情况进行分析:
1、web和数据库操作系统是否有问题
web端系统日志报错:ip_conntrack: table full, dropping packet
该报错说明web服务器有掉包情况,需要更改配置
# vim /etc/sysctl.conf 添加如下行
net.ipv4.netfilter.ip_conntrack_max = 655350
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 1200
有些系统是添加如下2行
net.nf_conntrack_max = 524688
net.netfilter.nf_conntrack_tcp_timeout_established = 1200
# sysctl -p
上面状态跟踪表的最大行数(nf_conntrack_max)最大值计算方式如下:
CONNTRACK_MAX = RAMSIZE (in bytes) / 16384 / (ARCH / 32)
因此内存为32G的64位系统的状态跟踪表的最大行数理论值为:
CONNTRACK_MAX = 32*1024*1024*1024/16384/2 = 1048576
# echo "163840" > /sys/module/nf_conntrack/parameters/hashsize
哈希表大小通常为总表的1/8,最大为1/2:CONNTRACK_BUCKETS = CONNTRACK_MAX / 8
2、是否能telnet连通mysql ip+port,防火墙问题iptables
查看MYSQL服务器端是否限制了3306端口的访问。
3、账号和权限是否正确
mysql账号由username@ip组成,如果仅仅username相同,而web的IP不在@ip范围内,是无法连接上MYSQL的
4、连接数是否超过最大限制
报错:Too many connections error
设置max_connections为更大的值或查看JDBC是否配置了连接池
5、登陆失败数达到最大值max_connect_err/FLUSH HOSTS;
当有用户连接MYSQL密码一直错误,超过max_connect_errors=1000会报错:ERROR 1129 (00000): Host ‘gateway’ is blocked because of many con
执行mysqladmin -u username -p flush-hosts即可。
6、mysql端口是否被其它程序占用
有时候会存在MYSQL端口被占用的情况, 请在脑海中注意这点,在所有判断都错误的时候,也行就是这个问题导致的。