首页 > 解决方案 > 在使用 python、pymysql 和 SSHTunnel 查询期间丢失与 MySQL 服务器的连接

问题描述

我正在使用 SSHTunnel 连接到 Mysql。我打算将数据集中的所有表导出到 CSV。这是代码

def OpenSSHTunnel():
    global server
    server = SSHTunnelForwarder(
        ('*.*.*.*', 22),  
        ssh_username="",  
        ssh_pkey="C:/Users/Administrator/Desktop/***",
        remote_bind_address=('*.*.*.*', 3306),
        local_bind_address=('0.0.0.0', 10022))

def exportToCsv(db):
    conn = pymysql.connect(host='127.0.0.1', 
                           port=10022,
                           user='**', 
                           passwd='**',
                           db=db)
    cur = conn.cursor()
    #cur.execute("set global max_allowed_packet=67108864")

    # RETRIEVE TABLES
    cur.execute("SHOW TABLES")
    tables = []
    for row in cur.fetchall():
        tables.append(row[0])

    for t in tables:    
        # SELECT STATEMENTS
        cur.execute("SELECT * FROM `{}`".format(t))
        tempcsv = '{}.csv'.format(t)
        rows = cur.fetchall()

        fp = open(tempcsv, 'w',newline='',encoding='utf-8')
        writer = csv.writer(fp)
        writer.writerow([i[0] for i in cur.description])   # COLUMN HEADERS
        writer.writerows(rows)
        fp.close()

我收到错误“2013,'在查询期间丢失与 MySQL 服务器的连接'”那么有没有办法解决这个问题?

我尝试设置全局 max_allowed_pa​​cket,但出现错误“1227,'访问被拒绝;您需要(至少一个)此操作的 SUPER 权限'”

标签: pythonmysqlpymysql

解决方案


我无法告诉你为什么,但我遇到了这个问题,它与 SSH 隧道有关。出于某种原因,从方法“返回”隧道/连接并传递它似乎不起作用。我尝试在主要方法中在隧道和连接中做所有事情,并为我修复了它。


推荐阅读