我如何解决在向 Amazon Aurora 上传数据或将数据从 Amazon Aurora 下载到 Amazon S3 时收到的错误?
我想从 Amazon Simple Storage Service (Amazon S3) 将数据上传到 Amazon Aurora。或者我想从 Amazon Aurora 下载数据,然后将数据上传到 Amazon S3。
简述
使用以下命令之一在 Amazon Aurora 和 Amazon S3 之间以文本文件形式加载数据:
- SELECT INTO OUTFILE S3 - 将数据从 Amazon Aurora 加载到 Amazon S3
- LOAD DATA FROM S3 - 将数据从 Amazon S3 加载到 Amazon Aurora
运行 SELECT INTO OUTFILE S3 或 LOAD DATA FROM S3 命令时可能会收到的一些常见错误包括:
- 错误代码: 1871。缺少凭证
- 命令不正确:缺少文件/前缀/清单关键字
- 错误代码: 1045。“访问被拒绝”错误
- 错误代码: 1815。内部错误: 无法初始化
- 错误代码: 1871。S3 API 返回错误: 访问被拒绝
解决方法
运行 SELECT INTO OUTFILE S3 或 LOAD DATA FROM S3 命令
使用 Amazon Aurora 运行 SELECT INTO OUTFILE S3 或 LOAD DATA FROM S3 命令:
1. 创建 S3 存储桶并复制 ARN。
2. 使用权限为 S3 存储桶创建 AWS Identity and Access Management (IAM) 策略。指定存储桶 ARN,然后向存储桶 ARN 内的对象授予权限。
如果您使用的不是 FullS3Access 策略,运行一个类似于以下策略的自定义策略:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::<your_bucket_name>", "arn:aws:s3:::<your_bucket_name>/*" ] } ] }
3.为 Amazon Relational Database Service (Amazon RDS) 服务创建 IAM 角色。然后将您创建的 IAM 策略附加到该角色。
信任关系如下所示:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
4. 为 Aurora 创建自定义数据库集群参数组。
对于 Aurora MySQL 版本 1 或 2:
将 aurora_select_into_s3_role 或 aws_default_s3_role 角色中的其中一个角色编辑为 IAM 角色 ARN 的值。
对于 Aurora MySQL 版本 3:
将 aws_default_s3_role 编辑为 IAM 角色 ARN 的值。
5. 将 IAM 角色附加到您创建的数据库集群。有关更多信息,请参阅将 IAM 角色与 Amazon Aurora MySQL 数据库集群关联。
7. 通过运行以下命令创建新用户:
CREATE USER 'testsaveload'@'%' IDENTIFIED BY 'somepassword'; show grants for 'testsaveload'@'%';
8. 通过运行以下命令向用户授予权限:
GRANT SELECT, CREATE, INSERT, DROP ON *.* TO 'testsaveload'@'%';
对于 Aurora MySQL 版本 1 或 2,使用以下语句:
GRANT SELECT INTO S3 ON *.* TO 'testsaveload'@'%'; GRANT LOAD FROM S3 ON *.* TO 'testsaveload'@'%';
对于 Aurora MySQL 版本 3,使用以下语句:
GRANT AWS_SELECT_S3_ACCESS TO 'testsaveload'@'%' GRANT AWS_LOAD_S3_ACCESS TO 'testsaveload'@'%';
**注意:**在 Aurora MySQL 版本 3 中,可以使用数据库集群参数启用 activate_all_roles_on_login。这将在用户连接到数据库实例时自动激活所有角色。有关更多信息,请参阅授予在 Amazon Aurora MySQL 中加载数据的权限。
9. 运行 SELECT INTO OUTFILE S3 或 LOAD DATA INTO S3 命令:
SELECT * from test1.test2034 INTO OUTFILE S3 's3://tests3saveloadaurora/testfile1prefix.part_00000'; LOAD DATA FROM S3 PREFIX 's3-us-east-1://tests3saveloadaurora/testfile1prefix.part_00000' INTO TABLE test3001; LOAD DATA FROM S3 's3-us-east-1://tests3saveloadaurora/prefix3.part_00000' INTO TABLE test3000;
错误代码: 1871。缺少凭证
SELECT * from test1.test2034 INTO OUTFILE S3 '"s3://tests3saveloadaurora/testfile1prefix.part_00000'; Error Code: 1871. S3 API returned error: Missing Credentials: Cannot instantiate S3 Client
您可能会在以下情况下收到此错误:
- IAM 角色未附加到数据库集群。请参见上一部分的步骤 5 来解决此问题。
- 未指定角色 ARN,参数组中仅列出角色名称。请参见上一部分的步骤 2 来解决此问题。
命令不正确:缺少文件/前缀/清单关键字
如果您收到“命令不正确:缺少文件/前缀/清单关键字”错误,说明您没有输入正确的关键字,命令无法成功运行。要修复此错误,输入命令的关键字。
错误代码: 1045。“访问被拒绝”错误
如果您输入的命令不正确,可能会收到错误,例如“1045: 用户 testsaveload'@'%'; 的访问被拒绝”。例如,此命令编写错误:
SELECT * from test1.test2034 INTO OUTFILE 's3://tests3saveloadaurora/testfile1prefix.part_00000';
请确保在查询中输入了关键字 S3。此命令编写正确:
SELECT * from test1.test2034 INTO OUTFILE S3 's3://tests3saveloadaurora/testfile1prefix.part_00000';
错误代码: 1815。内部错误: 无法初始化
LOAD DATA FROM S3 's3://tests3saveloadaurora/testfile1prefix.part_00000' INTO TABLE test3000; Error Code: 1815. Internal error: Unable to initialize S3Stream
您可能会因多种原因收到“错误代码: 1815。内部错误: 无法初始化”错误。
- 您的文件不存在。请确认该文件存在于您的 S3 存储桶中,并且您在脚本中指定的名称与文件名相匹配。务必区分大小写。请确认 S3 存储桶名称、文件夹名称和对象名称与加载命令中指定的名称完全匹配。
- 您在文件、文件夹或存储桶级别缺少相应的权限。请查看步骤 2,确保设置了正确的权限。
- LOAD 脚本中可能有语法错误。请查看您的 LOAD 脚本,然后重新运行该命令。
- S3 存储桶和数据库集群位于不同的区域,并且 S3 存储桶的路径缺少区域值。有关 AWS 区域的更多信息,请参阅 Amazon S3 端点和配额。
- 读取器和写入器实例的网络配置不同。有关更多信息,请参阅使用读取器端点。
错误代码: 1871。S3 API 返回错误: 访问被拒绝
如果您对 S3 存储桶进行了加密,您会收到“错误代码: 1871。S3 API 返回错误: 访问被拒绝”错误。或者,如果您的 S3 存储桶中有加密文件,您可能会收到此错误。如果 ServerSideEncryptionConfigurationExists 不为 false,将 kms:* 添加到您向用于执行 LOAD 操作的 IAM 角色附加的策略。例如,如果您使用的不是 FULLS3Access 策略,使用以下示例自定义策略:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:*", "kms:*" ], "Resource": [ "arn:aws:s3:::<your_bucket_name>", "arn:aws:s3:::<your_bucket_name>/*" ] } ] }
相关信息
相关内容
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前