读取通讯包时遇到错误

时间:2018-03-27 13:21:48

标签: python mysql

我试图弄清楚为什么我偶尔会从Python访问MySQL时遇到以下错误:

 2018-02-13T10:28:22.4616239Z 137675 [Note] Aborted connection 137675 to
 db: 'unconnected' user: 'username' host: '132.20.21.10' (Got an
 error reading communication packets)

根据文件可能的原因:

  • 客户端程序在退出之前没有调用mysql_close()。

不应该是这种情况,因为我们有一个finally:代码块执行close()。

  • 客户端的睡眠时间超过wait_timeout或interactive_timeout秒,而不向服务器发出任何请求。请参见第5.1.5节“服务器系统变量”。

绝对没有。

  • 客户端程序在数据传输过程中突然结束。

绝对不是。

  • max_allowed_pa​​cket变量值太小或查询需要的内存比为mysqld分配的内存多。请参见第B.5.2.9节“数据包太大”。

绝对不是。

  • 线程库导致读取中断的问题。

有没有人使用python MySQLdb,更具体地说mysqlclient https://pypi.python.org/pypi/mysqlclient有任何问题?

  • 配置错误的TCP / IP。有故障的以太网,集线器,交换机,电缆等。只有更换硬件才能正确诊断。 在Linux上使用以太网协议,包括半双工和全双工。

不应该是这种情况,因为它大部分时间都在工作。

如果您有任何想法,我们将不胜感激!

****编辑***

最终代码如下所示:

 def execute(self, query):
    try:
        connection = self.pool.connect()
        cursor = connection.cursor()
        cursor.execute(query)
        data = cursor.fetchall()
        return data
    finally:
        connection.close()
    return data

该池初始化如下:

import MySQLdb
import sqlalchemy.pool as pool

    def __init__(self, config, logging_name=None):
            def getconn():
                c = MySQLdb.connect(host=config.host, port=int(config.port), user=config.user,password=config.password,charset='UTF8')
                return c  
            self.pool = pool.QueuePool(getconn, logging_name=logging_name)

0 个答案:

没有答案