You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在GCP上用Python连接MySQL查询时出现InterfaceError 2013错误求助

解决GCP上Python连接MySQL时的InterfaceError: 2013错误

先帮你揪出代码里直接导致错误的核心问题,再补充GCP环境下的额外排查方向:

1. 代码逻辑的致命错误

你当前的代码存在几个明显的顺序和变量问题:

  • 连接被提前关闭:在创建cursor后立刻调用了cnx.close(),直接切断了和MySQL服务器的连接,后续再用cursor执行查询自然会失败。
  • 变量名不匹配:后面的if cur and con:里的cur和con根本没定义,你实际用的变量是cursor和cnx,这段代码不仅无效,还会触发NameError。
  • 查询顺序完全颠倒:你先关闭连接,再编写SQL语句并执行,逻辑完全混乱。

修复后的正确代码示例

import mysql.connector
import pandas as pd

# 第一步:先建立数据库连接
cnx = mysql.connector.connect(
    user='xxxxxx', 
    password='xxxxxx', 
    host='xxx.xxx.xxx.xx', 
    database='xxxxxxxxx'
)

try:
    # 第二步:创建游标、执行查询
    cursor = cnx.cursor()
    sql1 = "SELECT * FROM ms_trackevaluation_15_16.ms_skill"
    cursor.execute(sql1)
    rows = cursor.fetchall()
    
    # 转换为DataFrame(补全你的后续逻辑)
    df1 = pd.DataFrame(rows, columns=[desc[0] for desc in cursor.description])
    
finally:
    # 第三步:最后统一关闭游标和连接,确保资源释放
    if cursor:
        cursor.close()
    if cnx:
        cnx.close()

2. GCP环境下的额外排查方向

如果修复代码后仍然出现连接丢失错误,需要检查GCP相关配置:

  • 防火墙规则验证:如果MySQL部署在GCP Cloud SQL或VM实例上,确保对应的防火墙规则允许你的客户端IP(或GCP内部服务IP)访问3306端口。
  • MySQL超时参数调整:检查MySQL服务器的wait_timeout和interactive_timeout参数,如果设置过短,闲置连接会被服务器主动断开。可以执行SHOW VARIABLES LIKE '%timeout%';查看,必要时修改配置文件(如my.cnf)并重启服务。
  • 使用连接池优化:对于频繁的数据库操作,建议用连接池管理连接,避免反复创建/断开导致的不稳定。mysql-connector自带连接池支持:
    from mysql.connector.pooling import MySQLConnectionPool
    
    pool = MySQLConnectionPool(
        pool_name="mypool",
        pool_size=5,
        user='xxxxxx', 
        password='xxxxxx', 
        host='xxx.xxx.xxx.xx', 
        database='xxxxxxxxx'
    )
    # 从池中获取连接
    cnx = pool.get_connection()
    
  • 网络稳定性优化:如果是跨区域访问,尽量将客户端和MySQL实例部署在同一区域,减少网络延迟;也可以在代码中添加重连逻辑,捕获连接异常后尝试重新建立连接。

内容的提问来源于stack exchange,提问作者Shravan Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:07:44