PXC 5.7中限制模式(pxc-strict-mode)參數使用詳解

在Percona XtraDB Cluster集羣架構中,爲了避免多主節點導致的數據異常,或者說一些不被支持的特性引發的數據不一致的情形,PXC集羣可以通過配置pxc_strict_mode這個變量來實現。該變量的設置影響還是蠻大的。下文針對這個參數的不同設置進行描述,以及列出相關的具體影響。

一、PXC嚴格模式描述

PXC嚴格模式旨在避免在Percona XtraDB羣集中使用實驗性和不受支持的功能。它在啓動時和運行時執行一些驗證。

根據您選擇的實際模式,在遇到驗證失敗時,服務器將引發錯誤(停止啓動或拒絕操作),或者記錄警告並繼續正常運行。以下模式可用:

DISABLED:不要執行嚴格的模式驗證並正常運行。 
PERMISSIVE:如果vaidation失敗,請記錄警告並繼續正常運行。 
ENFORCING:如果在啓動期間驗證失敗,請停止服務器併發出錯誤。如果運行時驗證失敗,將拒絕操作並拋出錯誤。 
MASTER:等同於ENFORCING,除了不執行顯式表鎖定的驗證外 。此模式可以用於將寫入操作隔離到單個節點的羣集。

默認情況下,PXC嚴格模式設置爲ENFORCING,除非節點充當獨立服務器或節點爲自舉,則PXC嚴格模式默認爲DISABLED。

建議將PXC嚴格模式設置爲ENFORCING,因爲在這種情況下,每當Percona XtraDB集羣遇到實驗性功能或不受支持的操作時,服務器都會拒絕。這將迫使您重新評估您的Percona XtraDB集羣配置,而不會在數據一致性問題上冒險。

如果您打算將PXC嚴格模式設置爲其他任何模式ENFORCING,則應該瞭解這可能會對數據完整性造成的限制和影響。有關更多信息,請參閱驗證。

要設置模式,請使用pxc_strict_mode配置文件中的變量或啓動mysqld時使用–pxc-strict-mode

注意

用必要的模式啓動服務器會更好(默認ENFORCING是強烈推薦的)。但是,您可以在運行時動態更改它。例如,要將PXC嚴格模式設置爲PERMISSIVE,請運行以下命令:

mysql > SET pxc_strict_mode = PERMISSIVE ;

注意

爲了進一步確保數據的一致性,使羣集中的所有節點都以相同的配置(包括pxc_strict_mode變量的值)運行非常重要。

二、驗證

PXC嚴格模式驗證旨在確保不需要實驗功能的常見羣集設置的最佳操作,並且不依賴Percona XtraDB羣集不支持的操作。

警告

如果將某個節點pxc_strict_mode設置爲DISABLED或PERMISSIVE,並且在該節點上執行不受支持的操作,則即使目標節點將pxc_strict_mode設置爲ENFORCING,也不會在將其複製到的節點上進行驗證。

以下介紹每次驗證的目的和結果。

存儲引擎                            Storage engine 
MyISAM複製                      MyISAM replication 
二進制日誌格式                  Binary log format 
沒有主鍵的表                    Tables without primary keys 
日誌輸出                           Log output 
顯式表鎖定                      Explicit table locking 
自動增量鎖定模式                Auto-increment lock mode 
將模式和數據更改組合在一個語句中 Combining schema and data changes in a single statement 
放棄和導入表空間                Discarding and Importing Tablespaces

1、存儲引擎

Percona XtraDB集羣當前僅支持對使用事務性存儲引擎(XtraDB或InnoDB)的表進行復制。爲確保數據一致性,對於使用非事務性存儲引擎(MyISAM,MEMORY,CSV等)的表,不應允許使用以下語句:

   寫入到表數據操作語句(例如,INSERT,UPDATE,DELETE,等等) 
   相關管理語句: CHECK,OPTIMIZE,REPAIR,和ANALYZE 
   TRUNCATE TABLE 和 ALTER TABLE

根據所選模式,會發生以下情況:

DISABLED

   在啓動時,不執行驗證。 
   在運行時,所有操作都是允許的。

PERMISSIVE

   在啓動時,不會進行驗證。 
   在運行時,所有操作都是允許的,但是當在不支持的表上執行不需要的操作時,將會記錄一條警告。

ENFORCING 或者 MASTER

   在啓動時,不執行驗證。

   在運行時,不受支持的表上執行的任何不受歡迎的操作都將被拒絕並記錄一個錯誤。

注意

不支持的表可以轉換爲使用受支持的存儲引擎。

2、MyISAM複製

Percona XtraDB集羣爲複製使用MyISAM存儲引擎的表提供實驗支持。由於MyISAM的非事務性質,Percona XtraDB集羣不可能完全支持它。

MyISAM複製是使用默認wsrep_replicate_myisam設置的變量來控制,缺省設置爲OFF。由於其不可靠性,如果要確保數據一致性,則不應啓用MyISAM複製。

根據所選模式,會發生以下情況:

DISABLED

   在啓動時,不執行驗證。 
   在運行時,您可以設置wsrep_replicate_myisam任何值。

PERMISSIVE

   在啓動時,如果wsrep_replicate_myisam設置爲ON,則會記錄警告並繼續啓動。 
   在運行時,允許更改wsrep_replicate_myisam 爲任何值,但是如果將其設置爲ON,則會記錄警告。

ENFORCING 要麼 MASTER

   在啓動時,如果wsrep_replicate_myisam設置爲ON,則會記錄一個錯誤並啓動中止。 
   在運行時,任何嘗試更改wsrep_replicate_myisam 爲ON失敗並記錄錯誤。

注意

該wsrep_replicate_myisam變量控制 MyISAM表的複製,而這個驗證只檢查它是否被允許。使用存儲引擎驗證來限制MyISAM表的不需要的操作。

3、二進制日誌格式

Percona XtraDB集羣僅支持默認的基於行的二進制日誌記錄格式。將binlog_format變量設置爲除ROW之外啓動時都是不允許的,因爲這會改變全局範圍,必須將其設置爲ROW。驗證只在運行時和會話範圍內執行。 

根據所選模式,會發生以下情況:

DISABLED

   在運行時,您可以設置binlog_format任何值。

PERMISSIVE

   在運行時,允許更改binlog_format 爲任何值,但是如果將其設置爲其他值,ROW則會記錄警告。

ENFORCING 或 MASTER

   在運行時,任何嘗試更改binlog_format 爲ROW失敗以外的任何錯誤都會被記錄下來。

4、沒有主鍵的表

Percona XtraDB羣集無法正確地將某些寫入操作傳播給沒有定義主鍵的表。不需要的操作包括執行寫入表(尤其是DELETE)的數據操作語句。

根據所選模式,會發生以下情況:

DISABLED

  在啓動時,不執行驗證。 
  在運行時,所有操作都是允許的。

PERMISSIVE

  在啓動時,不會進行驗證。 
  在運行時,所有操作都是允許的,但是如果在沒有定義顯式主鍵的情況下在表上執行不希望的操作,則會記錄警告。

ENFORCING 或 MASTER

  在啓動時,不執行驗證。

  在運行時,任何在沒有顯式主鍵的表上執行的不受歡迎的操作都將被拒絕,並且會記錄一個錯誤。

5、日誌輸出

Percona XtraDB集羣不支持將MySQL數據庫中的表作爲日誌輸出的目的地。默認情況下,日誌條目被寫入文件。該驗證檢查log_output變量的值。

根據所選模式,會發生以下情況:

DISABLED

  在啓動時,不執行驗證。 
  在運行時,您可以設置log_output任何值。

PERMISSIVE

  啓動時,如果log_output僅設置爲TABLE,則會記錄警告並繼續啓動。 
  在運行時,可以將其更改log_output 爲任何值,但如果僅將其設置爲TABLE,則會記錄警告。

ENFORCING 或 MASTER

  在啓動時,如果log_output僅設置爲TABLE,則會記錄一個錯誤並啓動中止。 
  在運行時,任何嘗試log_output只更改TABLE失敗並記錄錯誤。

6、顯式表鎖定

Percona XtraDB集羣只有對顯式表鎖定操作的實驗性支持。以下不需要的操作會導致顯式表鎖定,並由此驗證涵蓋:

LOCK TABLES 
GET_LOCK() 和 RELEASE_LOCK() 
FLUSH TABLES  WITH READ LOCK 
設置SERIALIZABLE事務級別

根據所選模式,會發生以下情況:

DISABLED 或 MASTER

  在啓動時,不執行驗證。 
  在運行時,所有操作都是允許的。

PERMISSIVE

  在啓動時,不執行驗證。 
  在運行時,所有的操作都是允許的,但是當執行一個不希望的操作時會記錄一個警告。

ENFORCING

  在啓動時,不執行驗證。 
  在運行時,任何不受歡迎的操作都將被拒絕並記錄一個錯誤。

7、自動增量鎖定模式

用於生成自動遞增值的鎖定模式必須交錯, 以確保每個節點生成唯一的(但是不連續的)標識符。 
該驗證檢查innodb_autoinc_lock_mode變量的值。默認情況下,變量設置爲1(連續鎖定模式),但應該設置爲2(交錯鎖定模式)。 
根據所選的嚴格模式,會發生以下情況:

DISABLED

  在啓動時,不執行驗證。

PERMISSIVE

  在啓動時,如果innodb_autoinc_lock_mode未設置2,則會記錄警告並繼續啓動。

ENFORCING 或 MASTER

  在啓動時,如果innodb_autoinc_lock_mode沒有設置2,則會記錄一個錯誤並啓動中止。 
注意

此驗證不會在運行時執行,因爲該innodb_autoinc_lock_mode變量不能動態設置。

8、將模式和數據更改組合在一個語句中

Percona XtraDB集羣不支持(CTAS CREATE TABLE … AS SELECT)語句,因爲它們結合了模式和數據更改。 
根據所選的嚴格模式,會發生以下情況:

DISABLED

  在啓動時,不執行驗證。 
  在運行時,所有操作都是允許的。

PERMISSIVE

  在啓動時,不會進行驗證。 
  在運行時,所有操作都是允許的,但在執行CTAS操作時會記錄警告。

ENFORCING

  在啓動時,不執行驗證。 
  在運行時,任何CTAS操作都會被拒絕並記錄一個錯誤。

注意

臨時表的CTAS操作即使在嚴格模式下也是允許的。

9、放棄和導入表空間

DISCARD TABLESPACE並 使用TOI不被複制。如果只在一個節點上執行,可能會導致數據不一致。IMPORT TABLESPACE 
根據所選的嚴格模式,會發生以下情況:

DISABLED

  在啓動時,不執行驗證。 
  在運行時,所有操作都是允許的。

PERMISSIVE

  在啓動時,不會進行驗證。 
  在運行時,所有操作都是允許的,但是當放棄或導入表空間時會記錄一條警告。

ENFORCING

  在啓動時,不執行驗證。 
  在運行時,丟棄或導入表空間會被拒絕並記錄錯誤。

三、參考鏈接

https://www.percona.com/doc/percona-xtradb-cluster/LATEST/features/pxc-strict-mode.html
--------------------- 
來源:CSDN 
原文:https://blog.csdn.net/leshami/article/details/79865148 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章