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 execute
  File "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 Event
        if ret.has_key(‘id‘) and ret.has_key(‘return‘):
            # Igonre saltutil.find_job event
            if ret[‘fun‘] == "saltutil.find_job":
                continue
            if ret[‘fun‘] == "test.ping":
                continue
            sql = ‘‘‘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 Event
    else:
        pass
时间: 2024-10-11 07:25:39

python下保持mysql连接,避免“MySQL server has gone away“方法的相关文章

python下用mysqldb连接使用数据库

第一步:连接 import MySQLdb #首先需要引入mysqldb即Python 连接 MySQL 的模块. conn=MySQLdb.connect(host="localhost",user="root",passwd="")#此处等价于缺省值时即conn=MySQLdb.connect() cur = conn.cursor() #创建游标,用于发送sql指令 这样就可以用游标cur发送sql指令给mysql了. 第二步:操作 1.创

Mysql mysql lost connection to server during query 问题解决方法

缘由: 在查询Mysql中的数据库,或者修改比较大的表的时候就会出现这种情况:google之:方案1.在mysql配置文件[myslqd]下面添加一行设置skip-name-resolve.需要重启mysql服务. 方案2.在hosts文件内添加: ip与主机名的映射关系,如: 127.0.0.1 localhost. 这种方式不用重启mysql服务.---------------------------三个层面上解决这个问题:1. 代码层面,你需要在自己的PHP数据库连接处增加大致如下代码.i

phpmyadmin连接远程mysql

phpmaadmin连接远程mysql 连接远程mysql步骤 .保证已经有了phpmyadmin,如果没有,去http://www.phpmyadmin.net/home_page/downloads.php下载,安装:文章这里用集成开发环境wamp自带的phpmyadmin示范. 进入到phpmyadmin安装目录下,这里是:C:\wamp\apps\phpmyadmin4.1.14, .创建文件夹config:拷贝.config.inc.php到,\config\config.inc.ph

linux下源码编译安装mysql详解

1.redhat5环境下,首先安装编译环境 yum groupinstall -y  "Development Libraries"   "Development Tools" 2.由于源码编译mysql需要cmake命令,所以先要编译安装cmake包 首先下载cmake包,这里下载使用cmake-2.8.8.tar.gz tar xf cmake-2.8.8.tar.gz cd cmake-2.8.8 ./configure make && mak

MySQL PHP 语法;MySQL 连接

MySQL PHP 语法 MySQL 可应用于多种语言,包括 PERL, C, C++, JAVA 和 PHP. 在这些语言中,Mysql在PHP的web开发中是应用最广泛. 在本教程中我们大部分实例都采用了 PHP 语言.如果你想了解 Mysql 在 PHP 中的应用,可以访问我们的 PHP 中使用 Mysqli 介绍. PHP提供了多种方式来访问和操作Mysql数据库记录.PHP Mysqli函数格式如下: mysqli_function(value,value,...); 以上格式中 fu

python连接mysql数据库(MySQL)

在介绍python在数据库中的操作之前先简单介绍点mysql中的操作语言: [[email protected] 2018-01-24]# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 194 Server version: 5.6.16 Source distribution Copyright (c) 2

CentOS下安装MySQL,Windows下使用Navicat for MySql连接

安装 查看有没有安装过:          yum list installed mysql*          rpm -qa | grep mysql* 查看有没有安装包:          yum list mysql* 安装mysqlclient:          yum install mysql 安装mysql server端:          yum install mysql-server          yum install mysql-devel 启动&&停止

Navicat MySQL连接Linux下MySQL的问题解决方案

Error1: 2003:Can't connect to MySQL server on 'localhost' 解决方法:关闭Linux的防火墙功能. Linux代码   #chkconfig iptables off #reboot Error2: 1130 - Host'ClientIP' is not allowed to connect to this MySQL server 解决方法:使用root用户登陆Linux,更改容许登陆的IP地址范围. Mysql代码   mysql>g

MySQL在cmd和python下的常用操作

环境配置1:安装mysql,环境变量添加mysql的bin目录 环境配置2:python安装MySQL-Python 请根据自身操作系统下载安装,否则会报c ++ compile 9.0,import _mysql等错误 windows10 64位操作系统可到 http://www.lfd.uci.edu/~gohlke/pythonlibs/  下载安装MySQL-Python包,至于whl和tar.gz在windows和Linux下的安装方法可查看我的上一篇文章 一 .cmd命令下的操作: