本文介紹了SQL閃回功能的使用方法。

背景介紹

PolarDB-X SQL閃回功能針對SQL誤操作,提供行級數據的恢復能力。

當您在PolarDB-X上執行誤操作SQL(如INSERT、UPDATE或DELETE) 后,使用SQL閃回,提供相關的誤操作信息,即可從Binlog中找到匹配的事件,生成對應的恢復文件,下載后根據需求恢復數據。

SQL閃回針對誤操作SQL,支持模糊匹配與精確匹配兩種丟失數據的定位策略,以及自動選擇匹配策略的能力,請參見精確匹配與模糊匹配

面向不同的使用場景,SQL閃回提供回滾SQL與原始SQL兩種方式來恢復數據。

功能優勢

  • 操作簡單:輕松配置,填寫少量誤操作SQL信息,即可助您找回丟失的數據。
  • 靈活的恢復方式:針對不同的場景,提供回滾SQL與原始SQL兩種能力,恢復方式靈活多樣。
  • SQL級精確匹配能力:SQL級的誤操作數據精確匹配能力,提高數據恢復的精準性。

限制與說明

  • SQL閃回生成的恢復文件默認保存7天,生成后請盡快下載。
  • SQL閃回精確匹配需要滿足如下條件:
    • 執行誤操作SQL前,SQL閃回精確匹配能力已開啟。
    • 提供誤操作SQL的TRACE_ID信息。

生成恢復文件

  1. 登錄云原生分布式數據庫控制臺
  2. 在頁面左上角選擇目標實例所在地域。
  3. 實例列表頁,單擊PolarDB-X 2.0頁簽。
  4. 找到目標實例,單擊實例ID。
  5. 在左側導航欄中,單擊數據恢復 > SQL閃回
  6. 填寫誤操作SQL的基本信息,數據庫和時間范圍為必填參數,表名、TRACE_ID和SQL類型可以按需要填寫。
    456789

    參數說明:

    • SQL執行時間范圍:誤操作SQL執行的大致時間范圍,開始時間早于誤操作SQL開始執行時間,結束時間晚于誤操作SQL執行結束時間。為了保證恢復的效率,建議時間范圍盡可能精確。
    • TRACE_ID:PolarDB-X會為每條執行的SQL分配唯一的TRACE_ID,誤操作SQL的TRACE_ID值可以通過PolarDB-XSQL審計獲取。
  7. 單擊預檢,檢查提供的時間范圍內,Binlog是否存在。
    • 如果您提供的時間范圍內,存在Binlog,則預檢通過。
    • 如果您提供的時間范圍內,已不存Binlog,則提示預檢失敗,無法恢復數據。
  8. 選擇恢復方式,支持選擇回滾SQL和原始SQL。關于恢復方式的選擇,詳情請參見回滾SQL與原始SQL
  9. SQL閃回任務完成后,會顯示該任務的相關信息。 您可以單擊下載按鈕下載對應的恢復文件,進行數據恢復。

    恢復文件默認保存7天,請盡快下載。

定位誤操作SQL

  1. 在控制臺上選擇診斷與優化 > SQL審計與分析
    說明 如果您未開啟SQL審計,請參見開啟SQL審計與分析進行操作。
  2. 使用SQL審計與分析,定位誤操作SQL的審計記錄。關于如何快速定位誤操作SQL,請參見日志分析
  3. 獲取誤操作SQL數據中的sql_timetable_namesql_typetrace_id字段。456789

精確匹配與模糊匹配

SQL閃回根據您提供的誤操作SQL信息,在Binlog中查找對應的匹配事件,反向生成對應的恢復SQL。受實例版本、參數設置的影響,SQL閃回支持兩種Binlog事件的匹配策略:精確匹配與模糊匹配。具體的匹配策略無需選擇,當未提供TRACE_ID時為模糊匹配,當提供了TRACE_ID且您的實例具備精確匹配能力時為精確匹配,否則會降級為模糊匹配。PolarDB-X SQL閃回會自動檢測,選擇最優的匹配策略,并在閃回任務結束后通知您。

精確匹配

針對誤操作SQL,在Binlog中精確匹配出該SQL誤操作的事件,生成恢復文件。

優點:恢復文件中僅包含誤操作SQL誤刪(誤改)的數據,可直接使用,保證數據恢復的精準性與效率。

缺點:需要滿足以下的條件:
  • PolarDB-X實例版本在5.3.4-15378085版本及以上。
  • 執行誤操作SQL前,SQL閃回精確匹配開關已開啟。開啟SQL精確匹配開關后,Binlog中會默認帶上執行SQL的信息,增加一定的存儲空間。
  • 提供誤操作SQL的TRACE_ID信息。
模糊匹配

針對誤操作SQL的相關信息(執行時間范圍、操作表名、SQL類型等),在Binlog中匹配滿足條件的事件,生成對應的恢復文件。

優點:不依賴實例版本、參數設置等,所有實例都支持。

缺點:無法精準匹配誤刪(誤改)的數據,恢復文件中包含其它業務SQL改動的數據,需要您從中篩選出所需數據。

開啟精確匹配

  1. 登錄云原生分布式數據庫控制臺,前往指定實例的參數設置頁面,詳情請參見參數設置
  2. 確保binlog_rows_query_log_events參數值為ON(默認為ON)。456789

回滾SQL與原始SQL

為了支持不同的業務場景,PolarDB-X SQL閃回提供生成回滾SQL與生成原始SQL兩種恢復方式,您在生成恢復SQL文件前,需要根據使用場景,選擇對應的恢復方式。

下圖給出了SQL閃回針對一條誤操作,生成的回滾SQL與原始SQL示例。
回滾SQL

逆序遍歷Binlog中的匹配事件,對INSERT、UPDATE、DELETE事件進行逆反操作,生成的SQL。

  • INSERT逆反等價于DELETE。
  • DELETE逆反等價于REPLACE。
  • UPDATE逆反等價于UPDATE SET value=變更前。

使用方式:原表執行,對現有數據進行覆蓋性恢復。

適用場景:當需要恢復的數據沒有沖突或者接受部分沖突數據被覆蓋,建議生成回滾SQL。

原始SQL

順序遍歷Binlog中的匹配事件,對INSERT、UPDATE、DELETE事件進行全記錄的鏡像構造處理,生成的SQL。

  • INSERT鏡像等價于INSERT。
  • DELETE鏡像等價于INSERT。
  • UPDATE鏡像等價于INSERT變更前的值。

使用方式:臨時表執行,寫入誤操作前的原始數據,與現有數據進行對比,分析沖突后決定最終數據。

適用場景:當需要恢復的數據與當前數據存在沖突時,建議生成原始SQL。