1.内存被其它进程大量占用,或数据库本身数据量太大导致mysql宕机
2.程序访问mysql后没有执行mysql.close,大量占用资源导致宕机。
群里提出的这个问题主要是mysql5.5以上的,基本上不是mysql宕机。因为5.5以上的数据库会有个链接超时配置。
默认是28800秒也就是8个小时,会断开连接。
解决方案:
1.修改mysql配置。
如果是linux服务器编辑mysql.cnf 执行vi /etc/mysql.cnf
找到[mysqld] 在底下添加
interactive_timeout=28800000
wait_timeout=28800000
多加了三个0 也就是8000个小时。基本就不用考虑连接超时
修改完配置后,记得重启mysql服务。
2.程序方面。
以java程序为例(抱歉只会java)
打开Spring配置文件,修改applicationContext.xml
在datasource bean底下添加
用来指定测试连接所使用的SQL语句。
如果测试发现连接已经close,那么将自动重建连接。
<property name="houseKeepingTestSql">
<value>SELECT 1</value>
</property>
用来指定在使用连接之前要进行测试。
<property name="testBeforeUse">
<value>true</value>
</property>
具体解决法如下:1.排除网络或防火墙问题先看是否能ping通远程服务器,ping192.168.1.211,如果不可以就是网络问题。然后,检查端口是否被防火墙挡住了,telnet192.168.1.2113306,如果连接失败,配置防火墙。2.配置防火墙,开启3306端口vi/etc/sysconfig/iptables-AINPUT-mstate–stateNEW-mtcp-ptcp–dport3306-jACCEPT(允许3306端口通过防火墙)/etc/init.d/iptablesrestart(重启防火墙使配置生效)2.检查MySQL配置3.如果开启了防火墙,telnet还是失败,通过netstat查看3306的端口状态:netstat-apn|grep3360tcp600127.0.0.1:3306:::*LISTEN13524/mysqld注意红色的地方,这说明3306被绑定到了本地。检查一下my.cnf的配置,这里可以配置绑定ip地址。1.在mysql安装目录下的 my.ini 文件中的 [mysqld] 标签里加上 skip-grant-tables 跳过权限表2.重启mysql服务,这时可以连接上
3.改表
mysql>use mysql
mysql>update user set host = '%' where user = 'root'
mysql>select host, user from user
4.授权
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION
在网上看到这一句的意思是允许用户在任何地方可连接,password记得修改成root的密码
5.删除my.ini里的skip-grant-tables,重启mysql,就可以连接上了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)