mysql连接怎么维持 mysql几种连接方式

C3p0连接mysql,超时问题C3P0连接池连接mysql有时会出现如下错误:
这是C3P0配置的超时时间和mysql超时时间不一致导致的,C3P0为60秒超时,mysql为30秒超时,在30-60之间的时间mysql已经断开连接 , 而C3P0还维持连接,再次发送请求就会报上面的错误 。
解决方法:
1、修改C3P0的maxIdleTime参数为30 。
2、修改mysql的wait_timeout参数为60秒 。不停机状态下进入mysql命令行,执行set global wait_timeout=60;
mysql闲置8小时后,自动关闭连接,再对数据库进行操作就会出问题,如何解决你闲置数据库之前,要先断开连接, 等你需要使用时 再次连接,
简单地说就是 用完后,写点代码,将其关闭,然后再使用时 再做检查, 如果连接已经关闭,再次连接
这样做也是因为你的闲置时间太长了,
如果是一个小时或者两个小时什么的可以考虑设置数据库的断开时间
如何解决MySQL超过最大连接数问题遇到mysql超出最大连接数 , 相信不少人第一反应就是查看mysql进程,看有没有慢查询,当然这个做法是完全正确的!
但是很多时候真正的问题不在这里 。
今天有遇到同样的问题,一味查看mysql进程和慢查询日志,无果 。
后来老大提点了一下,查看一下nginx日志,发现有一两个访问执行时候比较长,然后使用top命令查看了一下服务器负载,惊了 , 居然超高!
最后发现原来有一台web分流主机挂了,导致另外几台web主机负载增高,从而导致了php-fpm的执行效率降低 。
【mysql连接怎么维持 mysql几种连接方式】那么这跟mysql有什么关系呢?原因很简单,因为php执行时间过长,mysql连接迟迟未释放,就会导致连接数过多出现 。
最后总结:其实很多时候 , 一个问题的根本原因并不是那么直接的呈现出来,需要自己去跟踪 。
老大有一句很实用的话:遇到问题先查日志(mysql、php、nginx等)
===============================================================
排查连接数过多的方法
当用户收到链接数告警时,意味着连接数即将达到该实例的上限 。如果实例的连接数超过了实例规定的连接数,将无法创建新的连接,这个时候会影响用户的业务;
Mysql 的连接通常是一个请求占用一个连接,如果该请求(update,insert,delete,select)长时间没有执行完毕 , 则会造成连接的堆积,迅速的消耗完数据库的连接数,这个时候技术支持人员就要登录数据库进行排序,看看到底是那些sql 占用了连接;
问题排查步骤:
1 、查看实例配置:
可登录RDS控制台“详情与配置”查看实例额定链接数,我们假设最高支持1500个链接
2、 查看当前的连接数:
1)可登录RDS控制台“性能监控”查看实例当前链接数 。
2)或者登录数据库查询当前连接,可以使用同步账号或者用户的业务账号登录数据库,执行show processlist;
[root@r41d05036.xy2.aliyun.com ~]# mysql -uroot -h127.0.0.1 -P3020 -e “show processlist”|wc -l
1262
可以看到该实例已经有1262 个连接
3、排查是什么动作占用了这些连接:
[root@r41d05036.xy2.aliyun.com ~]# myql -uroot -h127.0.0.1 -P3018 -e “show full processlist”/tmp/1.log
root@r14d11038.dg.aliyun.com # more /tmp/1.log
615083 my_db 223.4.49.212:54115 my_db Query 100 Sending data
INSERT INTO tmp_orders_modify (oid, tid, seller_id, status, gmt_create, gmt_modified)
SELECT oid, tid, seller_id, status, gmt_create, gmt_modified
FROM sys_info.orders WHERE
gmt_modifiedNAME_CONST(‘v_last’,_binary’2012-12-24 10:33:00’ COLLATE ‘binary’) AN
D gmt_modified = NAME_CONST(‘v_curr’,_binary’2012-12-24 10:32:00’ COLLATE ‘binary’)

推荐阅读