database - 将数据存储到 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.
解决方案
确保您将 mysql.tbl__name 中的所有权限授予您在“gsipre_output”中使用的用户/组。
为此,请转到您的 MySQL Workbench 并执行:
GRANT ALL on mysql.tbl__name to group your_user_group;
可能还有其他问题,例如您的 IAM 角色没有足够的权限(检查它是否具有 AmazonRedshiftDataFullAccess),甚至是表的所有权,但我首先提到的问题通常是最常见的问题。
推荐阅读
- ios - AudioKit:AKNodeRecorder 随机停止麦克风
- javascript - 如何使用 fofkJoin 获得多个结果然后使用结果?
- git - 在 Synology NAS 上启用 Gitlab LFS
- python - 使用 Python 将 docx 转换为图像
- android - 更改状态后 TextInput 值不更新?
- angularjs - 在 AWS EC2 Ubuntu 实例上运行的 2 个 Docker 容器之间的连接被拒绝
- c# - 实体框架数据库更新
- java - 我在 Android Studio 中的代码会发生什么情况?
- node.js - 使用 MongoDB 转换为数组数据的 asc 顺序
- ios - Swift 可编码 Json 响应