气流需要mysql吗?

气流需要mysql吗?,mysql,airflow,Mysql,Airflow,我正在尝试将我们的airflow版本升级到1.10.0。当我这样做时,我会收到一个错误,抱怨它无法连接到mysql: worker_1 | sqlalchemy.exc.OperationalError: (_mysql_exceptions.OperationalError) (2002, 'Can\'t connect to local MySQL server through socket \'/var/run/mysqld/mysqld.sock\' (2 "No such fi

我正在尝试将我们的airflow版本升级到1.10.0。当我这样做时,我会收到一个错误,抱怨它无法连接到mysql:

worker_1     | sqlalchemy.exc.OperationalError: (_mysql_exceptions.OperationalError) (2002, 'Can\'t connect to local MySQL server through socket \'/var/run/mysqld/mysqld.sock\' (2 "No such file or directory")') (Background on this error at: http://sqlalche.me/e/e3q8)
当我试图从我们的系统中完全删除mysql时,我得到了以下结果:

scheduler_1  | [2018-10-25 17:22:19,399] {{celery_executor.py:113}} ERROR - No module named 'MySQLdb'
Mysql没有出现在我们设置的环境变量中,也没有出现在afflow.cfg中。看起来这个版本的airflow出于其他原因需要mysql。这是真的吗

更新 这与提出的问题类似,但我更感兴趣的是为什么airflow会调用mysql

我还应该指出,我们确实显式地设置了到postgres数据库的sqlalchemy连接

AIRFLOW__CORE__SQL_ALCHEMY_CONN=postgres://airflow:airflow@postgres/airflow
当airflow试图写入任务运行的结果时(将某些内容标记为失败),会发生此错误

更新

这是我用来定义气流图像的dockerfile。注意:没有提到mysql:

# SOURCE: https://github.com/puckel/docker-airflow

FROM python:3.6-jessie

# Never prompts the user for choices on installation/configuration of packages
ENV DEBIAN_FRONTEND noninteractive
ENV TERM linux

# Airflow
ARG AIRFLOW_VERSION=1.10.0
ARG AIRFLOW_HOME=/usr/local/airflow

# Define en_US.
ENV LANGUAGE en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8
ENV LC_CTYPE en_US.UTF-8
ENV LC_MESSAGES en_US.UTF-8
ENV PYTHONPATH ${AIRFLOW_HOME}
ENV AIRFLOW_GPL_UNIDECODE yes

COPY ./requirements.txt .

RUN set -ex \
    && buildDeps=' \
        python3-dev \
        libkrb5-dev \
        libsasl2-dev \
        libssl-dev \
        libffi-dev \
        build-essential \
        libblas-dev \
        liblapack-dev \
        libpq-dev \
        git \
    ' \
    && apt-get update -yqq \
    && apt-get upgrade -yqq \
    && apt-get install -yqq --no-install-recommends \
        $buildDeps \
        python3-pip \
        python3-requests \
        apt-utils \
        curl \
        rsync \
        netcat \
        locales \
        vim \
    && sed -i 's/^# en_US.UTF-8 UTF-8$/en_US.UTF-8 UTF-8/g' /etc/locale.gen \
    && locale-gen \
    && update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 \
    && useradd -ms /bin/bash -d ${AIRFLOW_HOME} airflow \
    && pip install -U pip setuptools wheel \
    && pip install Cython \
    && pip install pytz \
    && pip install pyOpenSSL \
    && pip install ndg-httpsclient \
    && pip install pyasn1 \
    && pip install apache-airflow[crypto,celery,postgres,hive,jdbc]==$AIRFLOW_VERSION \
    && pip install 'celery[redis]>=4.1.1,<4.2.0' \
    && pip install -r requirements.txt \
    && apt-get purge --auto-remove -yqq $buildDeps \
    && apt-get autoremove -yqq --purge \
    && apt-get clean \
    && rm -rf \
        /var/lib/apt/lists/* \
        /tmp/* \
        /var/tmp/* \
        /usr/share/man \
        /usr/share/doc \
        /usr/share/doc-base

COPY script/entrypoint.sh /entrypoint.sh
COPY celery_healthcheck.sh ${AIRFLOW_HOME}
COPY config/airflow.cfg ${AIRFLOW_HOME}/airflow.cfg
COPY dags ${AIRFLOW_HOME}/dags
COPY operators ${AIRFLOW_HOME}/operators
COPY models ${AIRFLOW_HOME}/models
COPY constants.py ${AIRFLOW_HOME}/constants.py
COPY envconsul ${AIRFLOW_HOME}/envconsul
COPY *.hcl ${AIRFLOW_HOME}/

RUN chown -R airflow: ${AIRFLOW_HOME}

EXPOSE 8080 5555 8793

USER airflow
WORKDIR ${AIRFLOW_HOME}
#来源:https://github.com/puckel/docker-airflow
来自python:3.6-jessie
#从不提示用户选择软件包的安装/配置
环境DEBIAN_前端非交互
环境术语linux
#气流
ARG\u版本=1.10.0
ARG aiffair_HOME=/usr/local/aiffair
#给我们下定义。
环境语言en_US.UTF-8
ENV LANG en_US.UTF-8
环境LC_ALL en_US.UTF-8
环境LC_CTYPE en_US.UTF-8
环境LC_消息en_US.UTF-8
ENV PYTHONPATH${afflow_HOME}
环境气流\u GPL\u统一解码是
复制./requirements.txt。
运行设置-ex\
&&buildDeps=\
蟒蛇3开发\
libkrb5开发\
libsasl2开发\
libssl开发\
利伯菲开发公司\
建立必要的\
利布拉斯开发公司\
liblapack开发\
libpq开发\
吉特\
' \
&&apt获取更新-yqq\
&&apt获得升级-yqq\
&&apt get install-yqq——不建议安装\
$buildDeps\
蟒蛇3\
python3请求\
apt utils\
卷曲\
rsync\
网猫\
地区\
维姆\
&&sed-i's/^ en_US.UTF-8 UTF-8$/en_US.UTF-8 UTF-8/g'/etc/locale.gen\
&&区域设置生成\
&&更新locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8\
&&useradd-ms/bin/bash-d${afflow\u HOME}afflow\
&&pip安装-U pip设置工具轮\
&&pip安装Cython\
&&pip安装pytz\
&&pip安装pyOpenSSL\
&&pip安装ndg httpsclient\
&&pip安装pyasn1\
&&pip安装apache airflow[crypto、芹菜、postgres、hive、jdbc]==$airflow\u版本\

&&pip安装'Cellery[redis]>=4.1.1,气流需要一些数据库才能工作

通过设置
气流\uuuuuu核心\uuuuuu SQL\uu炼金术\uu连接=postgres://airflow:airflow@postgres/airflow
告诉它使用相应的PostreSQL数据库作为元数据数据库。它将尝试使用它

奇怪的是,它在错误消息中抱怨MySQL数据库。我猜您在以前的版本中使用了MySQL,并使用MySQL使用
Airflow initdb
初始化了Airflow元数据数据库。然后你删除了MySQL,开始抱怨

我将确保PostgerSQL数据库在
AIRFLOW\uuuuuu CORE\uuuuuu SQL\u ALCHEMY\u CONN
中指定的连接下是可访问的,并再次运行
AIRFLOW initdb
。然后,应该开始使用PostgreSQL数据库作为其元数据

如果它不起作用,并且您可以忍受丢失所有元数据的情况完全重置可能会有帮助:

airflow resetdb
airflow initdb

还要注意的是。

解决了这个问题。结果表明,另一个环境变量(
AIRFLOW\uuuCelery\uuuuuuuuuuResult\uBackend
)被设置为输入错误。我把它设置为
气流\芹菜\芹菜\结果\后端
。我不清楚为什么它在1.9中起作用,并在更新时突然抛出此错误,但当我修复了var时,它现在起作用了。

我看起来您正在使用一些默认连接配置。
即使您设置变量,如
sql\u alchemy\u conn
,气流仍将具有在管理->连接菜单中设置的值。
以下是我在新安装后的表现:


经过正确的
airflow initdb
设置后,使用UI的
airflow\u db
连接中的正确值修复了我所有的“mysql”错误。

您是否在以前的版本中使用了mysql或PostreSQL db?我一直在使用Postgres,但从未使用过mysql。Mysql是出于某种原因安装的,但它没有被使用。你能确定你是否没有在你创建的DAG中使用它吗?我在项目中做了一个
grep
,以了解Mysql。它不会出现在任何项目文件中。因为不是每个人都会使用同一个数据库,所以这些数据库是一样的。也许可以尝试使用
pip install aiffair[postgres,…]
进行新的安装?我尝试使用
aiffair initdb
从一个新的数据库开始完全清除数据库。这没用。我将尝试找出stacktrace上发生了什么,导致代码路径开始寻找mysql。感谢您的贡献。图像中的文本可能很难阅读,尤其是在移动设备上。根据SO指南,所有文本、代码、错误消息和数据都必须以文本形式呈现(如果适用,还必须以代码或引号格式呈现)。虽然您的图像中的信息可能会被认为是一个灰色区域,但出于可读性的考虑,我建议您将图像中的信息复制到文本中,以便为所有访问者带来最大的好处。您可以使用标记管道和破折号设置格式,以便根据需要将其对齐为类似表格的格式。
AIRFLOW\uuuCelery\uuResult\u BACKEND
适用于1.10+,该设置由调用的
AIRFLOW\uCelery\uCelery\uResult\u BACKEND使用,但在1.10.10中被重命名(旧设置可以工作,但会发出警告)