如果加工規則中涉及RDS資源的載入,則有可能會產生資源的載入或重新整理錯誤。本文介紹從RDS MySQL擷取資料出錯的原因以及排查處理方法。
在成功讀取源Logstore資料後,加工引擎開始對源Logstore的日誌事件進行加工。如果加工規則中涉及OSS、RDS、Logstore等外聯資源的載入,則也有可能會產生資源的載入或重新整理錯誤。
控制台單獨使用資源函數
加工規則
res_rds_mysql(address="xx",username="xx",password="xx",database="xx")
錯誤記錄檔
aliyun.log.logexception.LogException: {"errorCode": "InvalidEtlConfig", "errorMessage": "ETL config doesn't pass security check, detail: invalid type detected: <class '_ast.Expr'>", "requestId": ""}
排查方法
該錯誤資訊為文法配置錯誤,這種錯常見於使用者在控制台單獨使用res_rds_mysql、res_log_logstore_pull或res_oss_file函數。
解決方案
不可以單獨在控制台上使用資源函數,需結合e_table_map或者e_search_table_map等函數使用。
參數填寫錯誤
加工規則
e_table_map(res_rds_mysql(address="xx",username="xx",password="xx",database="xx"),field="processid",output_fields=["name","xixi"])
錯誤記錄檔
When sql is not set, table must be set\nDetail: None
排查方法
確保已配置table參數或sql參數。
解決方案
當您未配置table參數時,必須配置指定的sql語句,否則找不到資料庫表無法進行資料擷取。table參數和sql參數,必須配置其中一個。
輸出欄位錯誤
加工規則
e_table_map(res_rds_mysql(address="x",username="xx",password="xx",database="xx",table="test"),field="processid",output_fields=["name","xixi"])
錯誤記錄檔
trans_comp_lookup: output field xixi doesn't exist in lookup table\nDetail: None
排查方法
output_fields參數中配置的欄位並不存在於MySQL資料表中。
解決方案
請確認MySQL資料表所包含的欄位,將正確的欄位填入output_fields中。
參數類型配置錯誤
加工規則
e_table_map(res_rds_mysql(address="xxx",username=1234,password="xx",database="xx",table="xx"),field="processid",output_fields=["name","xixi"])
錯誤記錄檔
username not a string type\nInvalid Settings
排查方法
username的值不是String類型。
解決方案
配置正確的資料類型。
網路或者許可權錯誤
加工規則
e_table_map(res_rds_mysql(address="xxx",username=xxx,password="xx",database="test999",table="xx"),field="processid",output_fields=["name","xixi"])
錯誤記錄檔1
message: Database connection failed, cause: (1045, "Access denied for user 'user1'@'192.0.2.1' (using password: YES)")
錯誤記錄檔2
message: Database connection failed, cause: (1049, "Unknown database 'test999')
排查方法
請檢查配置是否錯誤、網路是否連通、是否已配置RDS MySQL白名單。當出現無法串連錯誤時,錯誤記錄檔的cause欄位中,會展示詳細的原因。您可以根據錯誤原因進行排查,一般為許可權、密碼、地址等錯誤。
解決方案
排查原因後重新設定函數,重啟資料加工服務。
SQL語法錯誤
加工規則
e_table_map(res_rds_mysql(address="xxx",username=xxx,password="xx",database="xx",sql="inset into test values(1,"aini")",field="processid",output_fields=["name","xixi"]))
錯誤記錄檔
\"errorMessage\": \"The sql_query field only supports database query syntax\\nInvalid Settings \\\"insert into test values(1,aini)\\\"\\nDetail: None\", \"requestId\": \"\"}
排查方法
SQL語法錯誤。首先SQL文法僅支援從資料庫中讀取資料的模式。其次,當寫入資料庫的SQL語法錯誤事,也會引發
fetch data error
錯誤,此時請根據錯誤原因分析。解決方案
更新SQL語句。資源函數中的SQL文法只支援SELECT查詢語句。
持續重新整理錯誤
加工規則
e_table_map(res_rds_mysql(address="xxx",username=xxx,password="xx",database="xx",table="test,field="processid",output_fields=["name","xixi"],refresh_interval=30))
錯誤記錄檔
\"errorMessage\": \"Database connection failed, cause: (2003, \\\"Can't connect to MySQL server on 'rm-wz9z68i4itrk4v8d9yo.mysql.rds.aliyuncs.com' (timed out))
排查方法
RDS MySQL資料庫將白名單授權取消,導致無法串連的錯誤。當持續加工過程中遇到錯誤,例如部分網路震蕩,會自動進行重試。如果遇到許可權被取消、資料表被刪除的錯誤,需要手動恢複。
解決方案
請根據錯誤原因確認RDS MySQL資料庫中的資料表或者許可權發生了變動。