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会报错
这个问题很常见,通常是因为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()
几个关键点:
-
SSL证书:你需要从Cloud SQL控制台下载三个PEM文件:
server-ca.pem- 服务器CA证书client-cert.pem- 客户端证书client-key.pem- 客户端私钥
-
连接方式:
- 如果使用公网IP:直接用IP地址作为host
- 如果使用私有IP或Cloud SQL代理:配置会有所不同
-
常见错误原因:
- 没配置SSL参数(最常见)
- SSL证书路径错误
- 防火墙没开3306端口
- IAM数据库认证没配置好
如果不想用SSL(不推荐生产环境):
# 在连接参数中明确禁用SSL验证
ssl={'ssl': {'check_hostname': False}} # 仅测试用!
一句话建议:检查SSL配置,确保证书路径正确。

