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

Python Azure Function本地可插入Azure MySQL Flexible Server,云端失效

解决方案

1. 先补全Application Insights拿到日志

没有日志根本没法定位问题,先搞定这个:

  • 进入Azure Functions应用的配置页,找到Application Insights,关联一个新的或已有的Insights资源(免费版足够排查)
  • 等待10分钟左右,前往Monitor > Logs运行查询 traces | order by timestamp desc,查看函数运行时的所有日志,重点关注数据库相关的报错信息

2. 核对云端数据库连接的核心配置

  • 检查应用设置里的数据库环境变量:MYSQL_HOST、MYSQL_USER、MYSQL_PASSWORD、MYSQL_DB必须和本地完全一致,注意密码中的特殊字符(比如@、&)是否存在转义问题,建议用单独的环境变量存储,不要直接写在连接字符串里
  • 检查MySQL Flexible Server的防火墙规则:将函数应用的所有出站IP地址(在函数应用概述页的属性中查找)添加到MySQL的防火墙允许列表;或者临时开启“允许Azure服务访问服务器”选项,测试是否是防火墙导致的问题

3. 修正云端的SSL证书配置

本地的SSL证书路径在云端不生效,换成Azure环境自带的证书:

  • 代码里把SSL CA证书路径改为 /etc/ssl/certs/Baltimore_CyberTrust_Root.pem,示例代码:
import os
import logging
import datetime
import azure.functions as func
import mysql.connector
from mysql.connector import errorcode

def main(mytimer: func.TimerRequest) -> None:
    utc_timestamp = datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc).isoformat()

    config = {
        'user': os.environ['MYSQL_USER'],
        'password': os.environ['MYSQL_PASSWORD'],
        'host': os.environ['MYSQL_HOST'],
        'database': os.environ['MYSQL_DB'],
        'client_flags': [mysql.connector.ClientFlag.SSL],
        'ssl_ca': '/etc/ssl/certs/Baltimore_CyberTrust_Root.pem'
    }

    conn = None
    try:
        conn = mysql.connector.connect(**config)
        cursor = conn.cursor()
        insert_query = "INSERT INTO test_table (timestamp) VALUES (%s)"
        cursor.execute(insert_query, (utc_timestamp,))
        conn.commit()
        logging.info("Data inserted successfully")
    except mysql.connector.Error as err:
        logging.error(f"Database error occurred: {err.msg} (Error code: {err.errno})")
    finally:
        if conn and conn.is_connected():
            cursor.close()
            conn.close()
  • 不要在代码里硬编码本地证书路径,要么用云端默认路径,要么用环境变量指定

4. 确认依赖包在云端正确安装

  • 进入函数应用的Advanced Tools(即Kudu),点击Go进入控制台,到site/wwwroot目录查看requirements.txt是否正确上传,再前往python_env/lib/python3.10/site-packages目录确认mysql.connector包存在
  • 如果依赖未安装成功,检查requirements.txt里的包版本,比如指定mysql-connector-python==8.0.32,确保和Python 3.10兼容

5. 直接在云端测试数据库连接

  • 在Kudu控制台新建一个简单的测试脚本test_db.py,编写最小化的数据库连接插入逻辑,手动运行python test_db.py,验证是否能成功插入,排除函数触发机制的问题
  • 如果使用托管身份连接MySQL,确认托管身份已被分配MySQL的数据库权限,且连接字符串采用身份验证方式,而非用户名密码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 21:52:30