项目场景:
生产一台数据库服务器因为内存吃紧,需要增加内存。然后决定将数据库服务器的内存由16G增加到32G。 该服务器系统是ubuntu16.04
问题描述:
服务器管理人员增加完内存后,笔者进行验证服务时,首先看了下mysql的进程是否起来了,发现mysql进程正常,然后就去管理后台查看数据是否查询正常。进去后发现数据查询并不能正常响应。心里一慌,完蛋!!!!
原因分析:
笔者经历了几个阶段最后定位了错误。
1.首先看了下ubuntu系统的防火墙是否开启了,发现是关闭的。说明不是端口放行的问题。
sudo apt-get install ufw
sudo ufw status
sudo ufw enable
sudo ufw disable
sudo ufw version
sudo ufw default allow
sudo ufw default deny
sudo ufw allow 3306
sudo ufw delete allow 3306
sudo ufw allow from 192.168.0.1
2.既然防火墙没事,然后测试下其他机器telnet一下该机的3306,发现是正常的说明端口正常。排除了端口问题。
telnet 10.10.1.1 3306
3.端口既然也联通了,为什么程序访问数据库时老超时呢,使用Navicat连接报了一个“too many connetions ”,好了然后知道问题了。此时就知道应该是因为服务有人在用,数据库服务刚起来,数据库的连接池就被占满了。然后连接又没释放,就一直连不上超时了。
解决方案:
既然知道了是因为连接迅速被占满导致的问题,那么就更改连接池大小就行了。
1.更改数据库配置文件中连接池的大小设置。
whereis my.cnf
vim /etc/my.cnf
更改配置文件时注意,我们应该在mysqld模块增加连接池的配置,如下图max_connections=1000所示: 笔者这里更改了1000。
2.更改完了配置文件我们就可以重启mysql了。
service mysql stop
service mysql start
此时执行此命令,发现不能执行,报如下错误: Failed to start mysql.service: Unit mysql.service not found 竟然找不到mysql.service,那就只能找下mysql.server所在位置了。
find / -name mysql.server
/app/mysql/support-files/mysql.server stop
/app/mysql/support-files/mysql.server start
ps -ef|grep mysql
3.搞定了。
|