我正在尝试使用 Apache Airflow S3ToMySqlOperator 运算符(文档)将某个 S3 文件的内容插入到 AWS RDS SQL 数据库中。我为此使用的代码如下所示:
s3_most_recent_file_to_sql = S3ToMySqlOperator(
s3_source_key='s3://housing-project-airflow/house-links/filtered-links-most-recent/filtered_most_recent.csv',
mysql_table='housing_project_db.city_info',
mysql_duplicate_key_handling='REPLACE',
task_id='s3_most_recent_file_to_sql',
aws_conn_id='aws_s3_connection',
mysql_conn_id='sql_conn_id',
dag=funda_scraper_dag)
“mysql_conn_id”具有 AWS RDS 管理员帐户连接中的“登录名”。现在,当在 DAG 中运行它时,我收到以下错误代码:
MySQLdb._exceptions.OperationalError:(2068,“由于访问限制,加载数据本地INFILE文件请求被拒绝。”)
现在我的猜测是管理员帐户没有权限将任何文件加载到给定的数据库/表中。当我检查 DBeaver 中的管理员用户权限时,这一点得到了证实;未选择“文件”权限。
所以现在我尝试为管理员帐户添加此文件权限,但我无法完成。
我尝试的是使用以下命令连接到 RDS SQL 服务器: mysql -h housing-project-db.ckvznkgqispo.eu-west-2.rds.amazonaws.com -P 3306 -u admin -p,之后我运行命令:
将 mysql.* 上的文件授予“admin”@“housing-project-db.ckvznkgqispo.eu-west-2.rds.amazonaws.com”,由“mysecretpassword”标识;,之后我得到
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本对应的手册,了解在第 1 行“IDENTIFIED BY 'mysecretpassword'”附近使用的正确语法
当我搜索其他遇到此问题的人时,他们提供了此解决方案,所以我根本不明白为什么我会收到语法错误...我正在使用 MySQL 服务器版本 8.0。
对您来说有点晚了,但其他人可能会尝试启用
allow_local_infile
。请查看 Airflow 文档此处。基本上,您将 allow_local_infile
参数添加到 MySQL Airflow 连接详细信息中的 Extras 部分。
使用较旧的 Airflow 版本,在 Airflow ui 中设置连接时,我必须额外设置
local_infile
。