mysql_ping与mysql长连接

今天有大收获。最近开发的一个系统,后台用的线程池来处理请求,而每个线程池持有一个mysql连接。这个程序有时候会莫名其妙的死掉,好像是在操作数据库的时候。由于出现的概率比较小,所以不大好捕捉bug。今天和一个同事聊起这事的时候,才知道他也遇到过这个问题,而这个问题的原因是由于数据库连接由于长时间没有操作而会被自动关闭。哈哈,真是踏破铁鞋无觅处,得来全不费工夫。解决方法就是在用mysql_ping来自动检查重连。

-------------------------------------------------------------------------------------------------------------------------------------------

首先,如果使用了长连接而长期没有对数据库进行任何操作,那么在timeout值后,mysql server就会关闭此连接,而客户端在执行查询的时候就会得到一个类似于“MySQL server has gone away“这样的错误。

一个好的解决方法是使用mysql_ping。在使用mysql_real_connect连接数据库之后,再使用mysql_options( &mysql, MYSQL_OPT_RECONNECT, … ) 来设置为自动重连。这样当mysql连接丢失的时候,使用mysql_ping能够自动重连数据库。如果是在mysql 5.1.6之前,那么则应在每次执行完real_connect 之后执行mysql_options( &mysql, MYSQL_OPT_RECONNECT, … ) ,如果是mysql 5.1.6+,则在connect之前执行一次就够了。

有一种很自然的想法就是,新开一个线程,让它隔一定时间(如20秒)就执行一次mysql_ping.除此而外它什么都不用做。但是显然,这个线程必须与其它线程共享一个mysql连接,共享该mysql句柄。否则这样做一点意义都没有。

但是,mysql_ping会改变mysql_affected_rows的返回值。所以最好是给该MYSQL句柄再加一个mutex(最好是读写锁)。当其它线程准备执行query的时候,就获取锁,执行完就释放。而这个执行mysql_ping的线程在执行ping之间先尝试获取锁,如果获取失败,则继续sleep,放弃这一轮的ping。

mysql ping 长连接超时时间_mysql_ping与mysql长连接(部分摘录) | 学步园相关推荐

  1. linux http连接超时时间设置,Linux 下 HTTP连接超时

    将项目部署到现场环境,HTTP请求莫名奇妙的连接超时,通过抓包定位了问题,是请求的IP被禁止掉.其中用到了抓包,将记录记录于此. tcpdump host 120.197.89.51 -i any - ...

  2. 网页 服务器长连接超时时间,服务器设置长连接超时时间

    服务器设置长连接超时时间 内容精选 换一换 有以下几种现象:将制作好的SD卡插入开发者板并上电后,开发者板LED1与LED2灯状态信息异常.将制作好的SD卡插入开发者板,并通过USB方式连接Ubunt ...

  3. golang mysql 超时_golang中mysql建立连接超时时间timeout 测试

    本文测试连接mysql的超时时间. 这里的"连接"是建立连接的意思. 连接mysql的超时时间是通过参数timeout设置的. 1.建立连接超时测试 下面例子中,设置连接超时时间为 ...

  4. golang中mysql建立连接超时时间timeout 测试

    本文测试连接mysql的超时时间. 这里的"连接"是建立连接的意思. 连接mysql的超时时间是通过参数timeout设置的. 1.建立连接超时测试 下面例子中,设置连接超时时间为 ...

  5. 网页 服务器长连接超时,服务器客户端长连接超时时间吗

    服务器客户端长连接超时时间吗 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. R ...

  6. 连接mysql超时时间设置多少_怎么设置数据库的连接数和连接超时时间

    如何设置数据库的连接数和连接超时时间 连接数的话可以修改spfile文件来约束 查看当前的连接数: select count(*) from v$process; –数据库允许的最大连接数: sele ...

  7. Java两则故障分析和常见连接超时时间

    郑昀 汇总 20130309 常见现象的故障分析: 现象倒推一:Java Web应用的连接数暴增 最大的可能是,Web应用的线程调用路径中阻塞在某个远端资源上. 线程向某个远端资源发起的请求被阻塞,可 ...

  8. 如何控制C#Socket的连接超时时间

    最近在Socket编程的时候发现只能设置Send和Recieve的Timeout时间,而Connect方法的Timeout是固定的,大概有30-40s,如果用同步方法界面会卡死很长时间 下面介绍两种通 ...

  9. hibernate3连接mysql8报错_MySQL的8小时连接超时时间,导致系统过夜即崩溃,报错Could not roll back Hibernate transaction...

    2014年3月开始给单位开发<机关规范化管理网络平台>,10月底成功上线运行,但是存在一个bug: 部署环境: apache tomcat 6.0.41 + mysql5.5 + jbpm ...

最新文章

  1. 关于GCN,我有三种写法
  2. 汤森路透为何一定要卖掉SCI?
  3. python按概率输出分类结果_sklearn例程:多分类输出概率
  4. 如何快速打造企业ISO体系文件管理
  5. idea GsonFormat插件使用报错 StringIndexOutOfBoundsException: begin 0, end -1, length 9
  6. javascript淘宝主图放大镜功能
  7. 51. N 皇后018(回溯法求解)
  8. php进程间通信 yoc_续上篇Swoole多进程数据共享的问题
  9. 当云原生遇到混合云:如何实现“求变”与“求稳”的平衡
  10. 任意门怎么用团发_衣柜门选用什么材料好?小编在这里告诉你
  11. 三极管什么时候工作在饱和区
  12. cmpp协议对服务器资源消耗大吗,cmpp协议采用什么安全算法 CMPP协议有啥用?
  13. Kali Linux 2022下载
  14. ADSL 拨号代理的搭建
  15. Package cmake is not available, but is referred to by another package.
  16. 教你免费使用百度云GPU算力提交深度学习任务
  17. V6H--升级3种方式和修改版本号
  18. vue页面白屏的原因及优化
  19. 企业信息安全防泄密浅析
  20. Eclipse Java Oxygen不能创建动态的web项目(解决方法)

热门文章

  1. 20160828小结
  2. CUDA 9.0安装+CUDA版本转换 + cuDNN7.1安装
  3. Welcome to NHibernate
  4. 又找到一个免费的ASP.net2.0免费空间,支持MS Sql Server Express2005 及Ftp
  5. 2018-2019-20175203 实验二 《Java面向对象程序设计》
  6. 以京东为代表电商平台成中华老字号销售增速最快渠道
  7. vue2.0 + vux (六)NewsList 资讯页 及 NewsDetail 资讯详情页
  8. 7.让网站支持http和https的访问方式
  9. Ubuntu Git安装与使用
  10. [20170828]grep过滤技巧.txt