项目场景:


生产一台数据库服务器因为内存吃紧,需要增加内存。然后决定将数据库服务器的内存由16G增加到32G。 该服务器系统是ubuntu16.04


问题描述:


服务器管理人员增加完内存后,笔者进行验证服务时,首先看了下mysql的进程是否起来了,发现mysql进程正常,然后就去管理后台查看数据是否查询正常。进去后发现数据查询并不能正常响应。心里一慌,完蛋!!!!


原因分析:

笔者经历了几个阶段最后定位了错误。

1.首先看了下ubuntu系统的防火墙是否开启了,发现是关闭的。说明不是端口放行的问题。

#这里列举下ubuntu系统里关于防火墙的操作
sudo apt-get install ufw # 安装防火墙
sudo ufw status # 查看防火墙装态,inactive关闭,active开启
sudo ufw enable # 开启防火墙
sudo ufw disable # 关闭防火墙
sudo ufw version # 查看防火墙版本
sudo ufw default allow # 默认允许外部访问
sudo ufw default deny # 默认拒绝外部访问
sudo ufw allow 3306 # 放行3306端口
sudo ufw delete allow 3306 # 关闭放行端口
sudo ufw allow from 192.168.0.1 # 允许该ip访问所有端口

2.既然防火墙没事,然后测试下其他机器telnet一下该机的3306,发现是正常的说明端口正常。排除了端口问题。

telnet 10.10.1.1 3306 # telnet测试端口是否可以正常联通

3.端口既然也联通了,为什么程序访问数据库时老超时呢,使用Navicat连接报了一个“too many connetions ”,好了然后知道问题了。此时就知道应该是因为服务有人在用,数据库服务刚起来,数据库的连接池就被占满了。然后连接又没释放,就一直连不上超时了。


解决方案:

既然知道了是因为连接迅速被占满导致的问题,那么就更改连接池大小就行了。

1.更改数据库配置文件中连接池的大小设置。

whereis my.cnf # 寻找数据库配置文件的位置,使用find命令也一样
vim /etc/my.cnf # 更改数据库的配置文件。

更改配置文件时注意,我们应该在mysqld模块增加连接池的配置,如下图max_connections=1000所示:

mysql每次重启都不启动 mysql重启后连接不上_mysql


笔者这里更改了1000。

2.更改完了配置文件我们就可以重启mysql了。

service mysql stop # ubuntu中可以使用该命令停止mysql
service mysql start # ubuntu中可以使用该命令启动mysql

此时执行此命令,发现不能执行,报如下错误:

Failed to start mysql.service: Unit mysql.service not found

mysql每次重启都不启动 mysql重启后连接不上_服务器_02


竟然找不到mysql.service,那就只能找下mysql.server所在位置了。

find / -name mysql.server # 全局查找mysql.server文件
# 发现在这里 : /app/mysql/support-files/mysql.server
/app/mysql/support-files/mysql.server stop # 停止mysql服务
/app/mysql/support-files/mysql.server start # 启动mysql服务
ps -ef|grep mysql # 验证mysql是否正常启动

3.搞定了。