首页 > 解决方案 > 将数据存储到 AWS RDS / Aurora 时出现 AWS Glue MySQLSyntaxErrorException

问题描述

最近使用 AWS Glue 重新启动。

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException在执行代码时突然遇到了o125.pyWriteDynamicFrame。指示的错误Access denied for user 'admin'@'%' to database 'mysql' at ...

文件“/tmp/Dump to S3”,第 40 行,在 datasink4 = glueContext.write_dynamic_frame.from_jdbc_conf(frame = dropnullfields3, catalog_connection = "gsipre_output", connection_options = {"dbtable": "myxp_speaker__myxp_livestream_sessions", "database": "mysql" },transformation_ctx = “datasink4”)文件“/opt/amazon/lib/python3.6/site-packages/awsglue/dynamicframe.py”,第 665 行,在 from_jdbc_conf redshift_tmp_dir,transformation_ctx)文件“/opt/amazon/lib/ python3.6/site-packages/awsglue/context.py”,第 312 行,在 write_dynamic_frame_from_jdbc_conf 目录_id)文件“/opt/amazon/lib/python3.6/site-packages/awsglue/context.py”,第 328 行,在write_from_jdbc_conf 返回 DataSink(j_sink, self).write(frame_or_dfc) 文件“/opt/amazon/lib/python3.6/site-packages/awsglue/data_sink.py”,第 35 行,写入返回 self.writeFrame(dynamic_frame_or_dfc, info) 文件“/opt/amazon/lib/python3.6/site-packages/awsglue/data_sink.py” ,第 31 行,在 writeFrame 返回 DynamicFrame(self._jsink.pyWriteDynamicFrame(dynamic_frame._jdf, callsite(), info), dynamic_frame.glue_ctx, dynamic_frame.name + "_errors") 文件 "/opt/amazon/spark/python/lib /py4j-0.10.7-src.zip/py4j/java_gateway.py”,第 1257 行,在/opt/amazon/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py”,第 1257 行,在/opt/amazon/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py”,第 1257 行,在称呼answer, self.gateway_client, self.target_id, self.name) File "/opt/amazon/spark/python/lib/pyspark.zip/pyspark/sql/utils.py", line 63, in deco return f(*a , **kw) 文件“/opt/amazon/spark/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py”,第 328 行,get_return_value 格式(target_id,“.”,名称) , value) py4j.protocol.Py4JJavaError: 调用 o125.pyWriteDynamicFrame 时出错。: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 用户 'admin'@'%' 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance( NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect。



Here is the AWS Glue auto-generated script 
`datasink4 = glueContext.write_dynamic_frame.from_jdbc_conf(frame = dropnullfields3, catalog_connection = "gsipre_output", connection_options = {"dbtable": "tbl__name", "database": "mysql"}, transformation_ctx = "datasink4") `

Unsure where I have gone wrong.

标签: databaseamazon-web-servicesamazon-rdsaws-glue

解决方案


确保您将 mysql.tbl__name 中的所有权限授予您在“gsipre_output”中使用的用户/组。

为此,请转到您的 MySQL Workbench 并执行:

GRANT ALL on mysql.tbl__name to group your_user_group;

可能还有其他问题,例如您的 IAM 角色没有足够的权限(检查它是否具有 AmazonRedshiftDataFullAccess),甚至是表的所有权,但我首先提到的问题通常是最常见的问题。


推荐阅读