在Percona XtraDB Cluster叢集架構中,為了避免多主節點導緻的資料異常,或者說一些不被支援的特性引發的資料不一緻的情形,PXC叢集可以通過配置pxc_strict_mode這個變量來實作。該變量的設定影響還是蠻大的。下文針對這個參數的不同設定進行描述,以及列出相關的具體影響。
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
Percona XtraDB叢集目前僅支援對使用事務性存儲引擎(XtraDB或InnoDB)的表進行複制。為確定資料一緻性,對于使用非事務性存儲引擎(MyISAM,MEMORY,CSV等)的表,不應允許使用以下語句:
寫入到表資料操作語句(例如,INSERT,UPDATE,DELETE,等等)
相關管理語句: CHECK,OPTIMIZE,REPAIR,和ANALYZE
TRUNCATE TABLE 和 ALTER TABLE
根據所選模式,會發生以下情況:
DISABLED
在啟動時,不執行驗證。
在運作時,所有操作都是允許的。
PERMISSIVE
在啟動時,不會進行驗證。
在運作時,所有操作都是允許的,但是當在不支援的表上執行不需要的操作時,将會記錄一條警告。
ENFORCING 或者 MASTER
在運作時,不受支援的表上執行的任何不受歡迎的操作都将被拒絕并記錄一個錯誤。
不支援的表可以轉換為使用受支援的存儲引擎。
Percona XtraDB叢集為複制使用MyISAM存儲引擎的表提供實驗支援。由于MyISAM的非事務性質,Percona XtraDB叢集不可能完全支援它。
MyISAM複制是使用預設wsrep_replicate_myisam設定的變量來控制,預設設定為OFF。由于其不可靠性,如果要確定資料一緻性,則不應啟用MyISAM複制。
在運作時,您可以設定wsrep_replicate_myisam任何值。
在啟動時,如果wsrep_replicate_myisam設定為ON,則會記錄警告并繼續啟動。
在運作時,允許更改wsrep_replicate_myisam 為任何值,但是如果将其設定為ON,則會記錄警告。
ENFORCING 要麼 MASTER
在啟動時,如果wsrep_replicate_myisam設定為ON,則會記錄一個錯誤并啟動中止。
在運作時,任何嘗試更改wsrep_replicate_myisam 為ON失敗并記錄錯誤。
該wsrep_replicate_myisam變量控制 MyISAM表的複制,而這個驗證隻檢查它是否被允許。使用存儲引擎驗證來限制MyISAM表的不需要的操作。
Percona XtraDB叢集僅支援預設的基于行的二進制日志記錄格式。将binlog_format變量設定為除ROW之外啟動時都是不允許的,因為這會改變全局範圍,必須将其設定為ROW。驗證隻在運作時和會話範圍内執行。
在運作時,您可以設定binlog_format任何值。
在運作時,允許更改binlog_format 為任何值,但是如果将其設定為其他值,ROW則會記錄警告。
ENFORCING 或 MASTER
在運作時,任何嘗試更改binlog_format 為ROW失敗以外的任何錯誤都會被記錄下來。
Percona XtraDB群集無法正确地将某些寫入操作傳播給沒有定義主鍵的表。不需要的操作包括執行寫入表(尤其是DELETE)的資料操作語句。
在啟動時,不執行驗證。
在運作時,所有操作都是允許的。
在啟動時,不會進行驗證。
在運作時,所有操作都是允許的,但是如果在沒有定義顯式主鍵的情況下在表上執行不希望的操作,則會記錄警告。
在運作時,任何在沒有顯式主鍵的表上執行的不受歡迎的操作都将被拒絕,并且會記錄一個錯誤。
Percona XtraDB叢集不支援将MySQL資料庫中的表作為日志輸出的目的地。預設情況下,日志條目被寫入檔案。該驗證檢查log_output變量的值。
在運作時,您可以設定log_output任何值。
啟動時,如果log_output僅設定為TABLE,則會記錄警告并繼續啟動。
在運作時,可以将其更改log_output 為任何值,但如果僅将其設定為TABLE,則會記錄警告。
在啟動時,如果log_output僅設定為TABLE,則會記錄一個錯誤并啟動中止。
在運作時,任何嘗試log_output隻更改TABLE失敗并記錄錯誤。
Percona XtraDB叢集隻有對顯式表鎖定操作的實驗性支援。以下不需要的操作會導緻顯式表鎖定,并由此驗證涵蓋:
LOCK TABLES
GET_LOCK() 和 RELEASE_LOCK()
FLUSH TABLES WITH READ LOCK
設定SERIALIZABLE事務級别
DISABLED 或 MASTER
在運作時,所有的操作都是允許的,但是當執行一個不希望的操作時會記錄一個警告。
ENFORCING
在運作時,任何不受歡迎的操作都将被拒絕并記錄一個錯誤。
用于生成自動遞增值的鎖定模式必須交錯, 以確定每個節點生成唯一的(但是不連續的)辨別符。
該驗證檢查innodb_autoinc_lock_mode變量的值。預設情況下,變量設定為1(連續鎖定模式),但應該設定為2(交錯鎖定模式)。
根據所選的嚴格模式,會發生以下情況:
在啟動時,如果innodb_autoinc_lock_mode未設定2,則會記錄警告并繼續啟動。
在啟動時,如果innodb_autoinc_lock_mode沒有設定2,則會記錄一個錯誤并啟動中止。
此驗證不會在運作時執行,因為該innodb_autoinc_lock_mode變量不能動态設定。
Percona XtraDB叢集不支援(CTAS CREATE TABLE ... AS SELECT)語句,因為它們結合了模式和資料更改。
在運作時,所有操作都是允許的,但在執行CTAS操作時會記錄警告。
在運作時,任何CTAS操作都會被拒絕并記錄一個錯誤。
臨時表的CTAS操作即使在嚴格模式下也是允許的。
DISCARD TABLESPACE并 使用TOI不被複制。如果隻在一個節點上執行,可能會導緻資料不一緻。IMPORT TABLESPACE
在運作時,所有操作都是允許的,但是當放棄或導入表空間時會記錄一條警告。
在運作時,丢棄或導入表空間會被拒絕并記錄錯誤。
<a href="https://www.percona.com/doc/percona-xtradb-cluster/LATEST/features/pxc-strict-mode.html">https://www.percona.com/doc/percona-xtradb-cluster/LATEST/features/pxc-strict-mode.html</a>