Python中为什么使用pymysql连接Google Cloud SQL会报错

代码:
import pymysql

import pymysql.cursors

mydb = pymysql.connect(unix_socket=’/cloudsql/projectname:asia-east1:instance-name’,
host=“x.x.x.x”,
user=‘root’,
password=‘xxxxxxx’,
db=‘databasename’,
charset=‘utf8mb4’,
cursorclass=pymysql.cursors.DictCursor)

报错:
pymysql.err.OperationalError: (2003, “Can’t connect to MySQL server on ‘remotehost’ ([Errno 2] No such file or directory)”)

环境
python3.7 PyMySQL0.9.3
网络无问题,本地终端可连接
Python中为什么使用pymysql连接Google Cloud SQL会报错


1 回复

这个问题很常见,通常是因为Google Cloud SQL(特别是Cloud SQL for MySQL)默认启用了SSL加密连接,而你的pymysql连接参数没有正确配置SSL证书。

直接上代码,这是最常见的正确连接方式:

import pymysql
import ssl

# Cloud SQL的连接参数
connection = pymysql.connect(
    host='<你的实例公网IP>',  # 或者使用实例连接名
    user='<用户名>',
    password='<密码>',
    database='<数据库名>',
    port=3306,
    
    # 关键:SSL配置
    ssl={
        'ca': 'server-ca.pem',
        'cert': 'client-cert.pem', 
        'key': 'client-key.pem'
    },
    
    # 其他参数
    charset='utf8mb4',
    cursorclass=pymysql.cursors.DictCursor
)

try:
    with connection.cursor() as cursor:
        # 执行SQL查询
        sql = "SELECT VERSION()"
        cursor.execute(sql)
        result = cursor.fetchone()
        print(f"数据库版本: {result}")
finally:
    connection.close()

几个关键点:

  1. SSL证书:你需要从Cloud SQL控制台下载三个PEM文件:

    • server-ca.pem - 服务器CA证书
    • client-cert.pem - 客户端证书
    • client-key.pem - 客户端私钥
  2. 连接方式

    • 如果使用公网IP:直接用IP地址作为host
    • 如果使用私有IPCloud SQL代理:配置会有所不同
  3. 常见错误原因

    • 没配置SSL参数(最常见)
    • SSL证书路径错误
    • 防火墙没开3306端口
    • IAM数据库认证没配置好

如果不想用SSL(不推荐生产环境):

# 在连接参数中明确禁用SSL验证
ssl={'ssl': {'check_hostname': False}}  # 仅测试用!

一句话建议:检查SSL配置,确保证书路径正确。

回到顶部