Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
如何解決在 Amazon Aurora 和 Amazon S3 之間載入資料時的錯誤?
我想要修復在 Amazon Aurora 和 Amazon Simple Storage Service (Amazon S3) 之間載入資料時出現的錯誤。
簡短說明
若要在 Amazon Aurora 和 Amazon S3 之間將資料作為文字檔案載入,請使用 SELECT INTO OUTFILE S3 命令或 LOAD DATA FROM S3 命令。當您執行任一命令時,您可能會收到以下錯誤:
- 錯誤代碼: 1871.Missing Credentials
- Incorrect Command: missing file/prefix/manifest keyword
- Error code: 1045.Access denied error
- Error code: 1815.Internal error: Unable to initialize
- Error Code: 1871.S3 API returned error: Access Denied
解決方法
執行 SELECT INTO OUTFILE S3 或 LOAD DATA FROM S3 命令
請完成下列步驟:
-
建立 S3 儲存貯體並複製 ARN。
-
建立具有 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>/*" ] } ] }
-
為 Amazon Relational Database Service (Amazon RDS) 服務建立 IAM 角色。然後,附加您建立的 IAM 政策。信任關係看起來會類似以下內容:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
為 Amazon Aurora 建立自訂資料庫叢集參數群組。對於 Amazon Aurora MySQL 相容版本第 1 版或第 2 版,將 aurora_select_into_s3_role 或 aws_default_s3_role 編輯為 IAM 角色 ARN 的值。對於 Aurora MySQL 相容第 3 版,將 aws_default_s3_role 編輯為 IAM 角色 ARN 的值。
-
將 IAM 角色附加至您建立的資料庫叢集。如需詳細資訊,請參閱將 IAM 角色與 Amazon Aurora MySQL 資料庫叢集關聯。
-
若要建立新的使用者,請執行下列命令:
CREATE USER 'testsaveload'@'%' IDENTIFIED BY 'somepassword';show grants for 'testsaveload'@'%';
-
若要將權限授予使用者,請執行下列命令:
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 中載入資料。 執行 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.Missing Credentials (缺少憑證)
如果缺少資料庫叢集的 IAM 角色附件,請參閱「執行 SELECT INTO OUTFILE S3 或 LOAD DATA FROM S3 命令」一節中的步驟 5。如果未指定角色 ARN,且參數群組中僅列出角色名稱,則請參閱步驟 2。
Incorrect Command: missing file/prefix/manifest keyword (錯誤命令:缺少檔案/首碼/資訊清單關鍵字)
如果您收到此錯誤,請確定命令關鍵字正確。
錯誤代碼: 1045.Access denied error (拒絕存取錯誤)
如果輸入的命令不正確,那麼您可能會收到錯誤訊息,例如「1045: Access denied for user ''testsaveload'@'%';」(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.Internal error: Unable to initialize (內部錯誤:無法初始化)
如果您收到此錯誤,請完成以下步驟:
- 確認檔案存在於 S3 儲存貯體中,然後確認您在指令碼中指定的名稱與檔案名稱相符。確認 S3 儲存貯體、資料夾和物件名稱與載入命令相符。
- 請參閱「執行 SELECT INTO OUTFILE S3 或 LOAD DATA FROM S3 命令」一節中的步驟 2,確認您已設定正確的權限。
- 如果 LOAD 指令碼中出現語法錯誤,請檢閱 LOAD 指令碼,然後重新執行該命令。
- 如果 S3 儲存貯體和資料庫叢集位於不同的區域,且 S3 儲存貯體的路徑缺少「區域」值,請參閱 Amazon Simple Storage Service 端點和配額以取得更多資訊。
- 如果讀取器和寫入器執行個體的網路組態不同,請參閱 Amazon Aurora 端點連線以取得更多資訊。
錯誤代碼: 1871.S3 API returned error: Access Denied (S3 API 傳回錯誤:拒絕存取)
如果 S3 儲存貯體上有加密,或 S3 儲存貯體內有加密檔案,您可能會收到此錯誤。如果 ServerSideEncryptionConfigurationExists 不是 False,則在您連接至 IAM 角色 (用於執行 LOAD 操作) 的政策中加入 kms:*。
例如,如果您未使用 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>/*" ] } ] }
錯誤: S3 API returned error: Resource Not Found: No response body. (S3 API 傳回錯誤:找不到資源:沒有回應主體。)
若要解決此錯誤,請確定 ARN 和儲存貯體名稱正確。
相關資訊
相關內容
- 已提問 9 個月前lg...
- 已提問 1 年前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前