这个问题通常是由于Docker容器运行的长时间连接池导致的,在Airflow DAG文件中加入以下代码可以解决该问题:
from sqlalchemy import event, create_engine
# A workaround for lack of mysql+mysqldb support in SQLAlchemy with Python 3.
try:
import pymysql
pymysql.install_as_MySQLdb()
except ImportError:
pass
# Set the maximum connections to MySQL to avoid running out of available connections.
engine = create_engine('mysql://user:password@127.0.0.1/dbname')
event.listen(engine, 'checkout_pool', lambda conn, conn_record, conn_proxy: conn.ping(True))
这段代码将在每次从连接池中获取和归还MySQL连接时检查连接的状态,如果连接已经关闭,它将重启连接。这样就可以避免连接长时间空闲导致任务持续运行的问题。