python下保持mysql连接,避免“MySQL server has gone away“方法
因需要对saltstack的所有动作进行入库采集,网上采集脚本mysql连接会因超时而断开,导致守护进程在下一次采集数据时提示:
Traceback (most recent call last):File "./salt_event_to_mysql.py", line 39, in <module>ret['success'], json.dumps(ret)))File "build/bdist.linux-x86_64/egg/MySQLdb/cursors.py", line 173, in executeFile "build/bdist.linux-x86_64/egg/MySQLdb/connections.py", line 36, in defaulterrorhandler
_mysql_exceptions.OperationalError: (2006, 'MySQL server has gone away')
后退出,解决方法是采用类似mysql_ping()的方法在每次数据入库前做一次检测,唤醒连接,以下是完整代码:
#!/bin/env python
#coding=utf8
# Import python libs
import json
# Import salt modules
import salt.config
import salt.utils.event
# Import third party libs
import MySQLdb
__opts__ = salt.config.client_config('/etc/salt/master')
# Create MySQL connect
conn = MySQLdb.connect(host=__opts__['mysql']['host'], user=__opts__['mysql']['user'], passwd=__opts__['mysql']['pass'], db=__opts__['mysql']['db'], port=__opts__['mysql']['port'])
cursor = conn.cursor()
# Listen Salt Master Event System
event = salt.utils.event.MasterEvent(__opts__['sock_dir'])
for eachevent in event.iter_events(full=True):####保持连接的部分###########if conn is None:conn = MySQLdb.connect(host=__opts__['mysql']['host'], user=__opts__['mysql']['user'], passwd=__opts__['mysql']['pass'], db=__opts__['mysql']['db'], port=__opts__['mysql']['port'])cursor = conn.cursor()else:conn.ping(True)###########################ret = eachevent['data']if "salt/job/" in eachevent['tag']:# Return Eventif ret.has_key('id') and ret.has_key('return'):# Igonre saltutil.find_job eventif ret['fun'] == "saltutil.find_job":continueif ret['fun'] == "test.ping":continuesql = '''INSERT INTO `salt_returns`(`fun`, `jid`, `return`, `id`, `success`, `full_ret` )VALUES (%s, %s, %s, %s, %s, %s)'''cursor.execute(sql, (ret['fun'], ret['jid'],json.dumps(ret['return']), ret['id'],ret['success'], json.dumps(ret)))cursor.execute("COMMIT")# Other Eventelse:pass
转载于:https://blog.51cto.com/318106/1583891
python下保持mysql连接,避免“MySQL server has gone away“方法相关推荐
- freebsd php 编译 mysql sql2005_问下:Freebsd下用php连接ms sql server
你的位置: 问答吧 -> PHP -> 问题详情 问下:Freebsd下用php连接ms sql server 大家都怎么连接的,,,效率如何? 作者: james.liu 发布时间: 2 ...
- 关于MySQL连接Navicat Premium 12失败的解决方法
关于MySQL连接Navicat Premium 12失败的解决方法 参考文章: (1)关于MySQL连接Navicat Premium 12失败的解决方法 (2)https://www.cnblog ...
- python下的orm基本操作(1)--Mysql下的CRUD简单操作(含源码DEMO)
最近逐渐打算将工作的环境转移到ubuntu下,突然发现对于我来说,这ubuntu对于我这种上上网,收收邮件,写写博客,写写程序的时实在是太合适了,除了刚接触的时候会不怎么完全适应命令行及各种权限管理, ...
- mysql 连接闪断自动重连的方法
使用php作为后台运行程序(例如短信群发),在cli模式下执行php,php需要连接mysql循环执行数据库处理. 当mysql连接闪断时,之后循环的执行将会失败. 我们需要设计一个方法,当mysql ...
- php项目如何导jdbc包,JDBC-idea导入mysql连接java的jar包(mac)的方法
前言 1.本文使用的是mysql8.0版本 与5.0版本相比:导包方式相同,后面代码中的注册驱动方式不同 1.mac与pc的idea菜单和图标不是完全相同,但是步骤是差不多的 下载对应版本的jar包 ...
- mysql连接提示错误_服务器经常提示mysql连接错误,有木有解决方法?
网络是联通的,因为在同一主机内,本地连接到mysql服务器,和运行环境无关,php,python连接数据库都有这种情况出现 提示Can't connect to MySQL server on 'lo ...
- MySQL连接查询——MySQL 基础查询你会了吗?
前言: 由于大一学习数据库不扎实,学到后面有点吃力,所以回过头来认真学习一边,写一些学习总结,提醒自己.也要告诫读者,把基础打扎实.读者觉得有用的话可以收藏点赞哦! 上一篇:MySQL函数查询--My ...
- VScode配置MySQL连接使用MySQL
目录 本地安装MySQL 1. [MySQL官网下载(点击下载)](https://dev.mysql.com/downloads/mysql/) 2. 解压并设置环境变量 3. 初始化启动 VSco ...
- mysql 连接错误The server time zone value ‘?????????‘
完整报错信息 java.sql.SQLException: The server time zone value '?й???????' is unrecognized or represents m ...
- Mysql学习总结(62)——MySQL连接com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link问题
数据库出现如下连接问题 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The ...
最新文章
- java build.gradle 详解_java – Gradle构建失败[无法解析配置的所有依赖项’:compile’.]...
- 第一章 初识Mysql
- mysql数据库前端缓存_MySQL数据库性能优化--缓存参数优化
- ubuntu编译并调试OpenJDK8源码实践
- poj 1664 放苹果 DPDFS
- DatabaseMetaData.getIndexInfo
- PHP如何添加变量 $_SERVER
- 故障分析:数据库一致性关闭缓慢问题诊断
- 关于使用runtimeStyle属性问题讨论
- 【社会/人文】概念的理解 —— 断舍离、饭(饭制版)
- Java 生产环境 linux下汉字变方框解决
- 弘辽科技:淘宝开店类别怎么选择?淘宝开店如何选类目?
- 西工大计算机课程表,工大、高新、交大、爱知等7所名校初一作息时间表课表新鲜出炉!...
- 伯努利公式怎么推导的
- 微信小程序中使用wx.showToast()进行界面交互
- 新型城镇化:智慧城市成亮点
- jQuery table组织架构图表插件
- vue实现图片自定义尺寸裁切并上传
- 13部成功预知未来科技的科幻电影
- (阿里巴巴开发手册)为什么阿里巴巴推荐内部员工使用StringBuilder?