全部產品
Search
文件中心

Simple Log Service:擷取RDS MySQL資料語法錯誤

更新時間:Jun 30, 2024

如果加工規則中涉及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資料庫中的資料表或者許可權發生了變動。