以下討論作為與 Rewriter 查詢重寫外掛程式相關聯的這些元素的參考
query_rewrite資料庫中的Rewriter規則表格Rewriter程序和函式Rewriter系統和狀態變數
query_rewrite 資料庫中的 rewrite_rules 表格為 Rewriter 外掛程式用來決定是否重寫陳述式的規則提供持續性儲存。
使用者藉由修改儲存在此表格中的規則集來與外掛程式溝通。外掛程式藉由設定表格的 message 欄位來將資訊傳達給使用者。
規則表格由 flush_rewrite_rules 預存程序載入到外掛程式中。除非在最近一次表格修改後呼叫該程序,否則表格內容不一定與外掛程式正在使用的規則集相對應。
rewrite_rules 表格具有下列欄位
id規則 ID。此欄位是表格主索引鍵。您可以使用 ID 來唯一識別任何規則。
pattern範本,指出規則符合的陳述式模式。使用
?來表示符合資料值的參數標記。pattern_database用於比對陳述式中不完整表格名稱的資料庫。如果對應的資料庫和表格名稱相同,則陳述式中的完整表格名稱會比對模式中的完整名稱。只有在預設資料庫與
pattern_database相同且表格名稱相同時,陳述式中的不完整表格名稱才會比對模式中的不完整名稱。replacement範本,指出如何重寫符合
pattern欄位值的陳述式。使用?來表示符合資料值的參數標記。在重寫的陳述式中,外掛程式會使用pattern中對應標記所比對的資料值來取代replacement中的?參數標記。enabled是否啟用規則。只有在此欄位為
YES時,載入作業 (透過叫用flush_rewrite_rules()預存程序執行) 才會將規則從表格載入到Rewriter記憶體內快取中。此欄位讓您能夠停用規則而無需移除它:將此欄位設定為
YES以外的值,然後將表格重新載入到外掛程式中。message此插件使用此欄位與使用者溝通。如果將規則表載入記憶體時沒有發生錯誤,插件會將
message欄位設定為NULL。非NULL值表示發生錯誤,且欄位內容為錯誤訊息。在以下情況下可能會發生錯誤:模式 (pattern) 或取代 (replacement) 是不正確的 SQL 語句,會產生語法錯誤。
取代 (replacement) 包含比模式 (pattern) 更多的
?參數標記。
如果發生載入錯誤,插件也會將
Rewriter_reload_error狀態變數設定為ON。pattern_digest此欄位用於除錯和診斷。如果將規則表載入記憶體時此欄位存在,插件會使用模式摘要 (pattern digest) 更新此欄位。如果您試圖確定為什麼某些語句無法被重寫,此欄位可能很有用。
normalized_pattern此欄位用於除錯和診斷。如果將規則表載入記憶體時此欄位存在,插件會使用模式的標準化形式更新此欄位。如果您試圖確定為什麼某些語句無法被重寫,此欄位可能很有用。
Rewriter 插件操作使用一個儲存程序,將規則表載入其記憶體快取中,以及一個輔助的可載入函數。在正常操作下,使用者只會調用儲存程序。該函數旨在由儲存程序調用,而不是由使用者直接調用。
此儲存程序使用
load_rewrite_rules()函數,將rewrite_rules表格的內容載入Rewriter的記憶體快取中。呼叫
flush_rewrite_rules()意味著COMMIT。在您修改規則表後調用此程序,以使插件從新的表格內容更新其快取。如果發生任何錯誤,插件會為表格中相應的規則列設定
message欄位,並將Rewriter_reload_error狀態變數設定為ON。此函數是
flush_rewrite_rules()儲存程序使用的輔助常式。
Rewriter 查詢重寫插件支援以下系統變數。這些變數僅在安裝插件後才可用(請參閱第 7.6.4.1 節,「安裝或解除安裝 Rewriter 查詢重寫插件」)。
-
系統變數 rewriter_enabled範圍 全域 動態 是 SET_VAR提示適用否 類型 布林值 預設值 ON有效值 OFFRewriter查詢重寫插件是否啟用。 rewriter_enabled_for_threads_without_privilege_checks系統變數 rewriter_enabled_for_threads_without_privilege_checks範圍 全域 動態 是 SET_VAR提示適用否 類型 布林值 預設值 ON有效值 OFF是否對執行時停用權限檢查的複製執行緒套用重寫。如果設定為
OFF,則會跳過此類重寫。設定此變數需要SYSTEM_VARIABLES_ADMIN權限或SUPER權限。如果
rewriter_enabled為OFF,則此變數無效。-
系統變數 rewriter_verbose範圍 全域 動態 是 SET_VAR提示適用否 類型 整數 供內部使用。
Rewriter 查詢重寫插件支援以下狀態變數。這些變數僅在安裝插件後才可用(請參閱第 7.6.4.1 節,「安裝或解除安裝 Rewriter 查詢重寫插件」)。
從
rewrite_rules表格成功載入到記憶體中,供Rewriter插件使用的重寫規則數量。rewrite_rules表格被載入到Rewriter插件使用的記憶體快取的次數。Rewriter_number_rewritten_queries自載入以來,
Rewriter查詢重寫插件重寫的查詢數量。最近一次將
rewrite_rules表格載入到Rewriter插件使用的記憶體快取時是否發生錯誤。如果值為OFF,則未發生錯誤。如果值為ON,則發生錯誤;請查看rewriter_rules表格的message欄位以查看錯誤訊息。