以下討論作為與 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
有效值 OFF
Rewriter
查詢重寫插件是否啟用。 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
欄位以查看錯誤訊息。