摘要: 出处:黑洞中的奇点 的博客 http://www.cnblogs.com/kelvin19840813/ 您的支持是对博主最大的鼓励,感谢您的认真阅读。本文版权归作者所有,欢迎转载,但请保留该声明。
3.3.1 Validations
PXC严格模式验证旨在确保不需要的常见群集设置的最佳操作实验功能,不依赖Percona XtraDB Cluster不支持的操作。
警告:如果对 pxc_strict_mode 设置为DISABLED的节点执行不受支持的操作或 PERMISSIVE,
它将不会在复制到的节点上进行验证,即使目标节点具有 pxc_strict_mode 设置为ENFORCING。
本节介绍每个验证的目的和后果。
Storage engine
Percona XtraDB Cluster目前仅支持对使用事务存储引擎(XtraDB)的表进行复制或InnoDB)。
为了确保数据一致性,不应允许对使用非事务性存储引擎的表使用以下语句(MyISAM,MEMORY,CSV等):
• 执行写入表的数据操作语句(例如,INSERT,UPDATE,DELETE等)
• 以下管理语句:CHECK,OPTIMIZE,REPAIR和ANALYZE
• TRUNCATE TABLE and ALTER TABLE
根据所选模式,会发生以下情况:
DISABLED
在启动时,不执行验证。
在运行时,允许所有操作。
PERMISSIVE
在启动时,不会验证。
在运行时,允许所有操作,但在执行不良操作时会记录警告
在不受支持的表上。
ENFORCING or MASTER
在启动时,不执行验证。
在运行时,拒绝对不支持的表执行的任何不希望的操作,并记录错误。
不支持的表可以转换为使用支持的存储引擎。
MyISAM replication
Percona XtraDB Cluster为使用MyISAM存储引擎的表的复制提供实验性支持。
由于MyISAM的非事务性质,它不太可能在Percona XtraDB群集中得到完全支持。
MyISAM复制使用wsrep_replicate_myisam变量控制,该变量在默认情况下设置为OFF。
如果要确保数据一致性,则不应启用MyISAM复制。
根据所选模式,会发生以下情况:
DISABLED
在启动时,不执行验证。
在运行时,可以将 wsrep_replicate_myisam 设置为任何值。
PERMISSIVE
在启动时,如果wsrep_replicate_myisam设置为ON,则将记录警告并继续启动。
在运行时,允许将wsrep_replicate_myisam更改为任何值,但是如果将其设置为ON,
将记录警告。
ENFORCING or MASTER
在启动时,如果wsrep_replicate_myisam设置为ON,则会记录错误,并中止启动。
在运行时,任何尝试将wsrep_replicate_myisam更改为ON的尝试将失败,并记录错误。
注意:wsrep_replicate_myisam变量控制MyISAM表的复制以及此验证只检查是否允许。
MyISAM表的不需要的操作使用存储引擎进行限制验证。
注意: Percona XtraDB Cluster仅支持基于行的二进制日志格式。
Binary log format
Percona XtraDB Cluster仅支持基于行的二进制日志格式。不允许在启动时将binlog_format任何变量除了ROW,因为这会改变全局范围,必须设置为ROW,验证仅在运行时和会话范围内执行。
根据所选模式,会发生以下情况:
DISABLED
在运行时,可以将binlog_format设置为任何值。
PERMISSIVE
在运行时,允许将binlog_format更改为任何值,但如果将其设置为任何其他值比ROW,会记录一个警告。
ENFORCING or MASTER
在运行时,任何尝试将binlog_format更改为除ROW之外的任何尝试都失败,并且错误是记录。
Tables without primary keys
Percona XtraDB群集无法正确地将某些写入操作传播到未定义主键的表。
不需要的操作包括执行写入表(特别是DELETE)的数据操作语句。
根据所选模式会发生以下情况:
DISABLED
在启动时,不执行验证。
在运行时,允许所有操作。
PERMISSIVE
在启动时,不会验证。
在运行时,允许所有操作,但在执行不良操作时会记录警告在没有定义显式主键的表上。
ENFORCING or MASTER
在启动时,不执行验证。
在运行时,对没有显式主键的表执行的任何不希望的操作被拒绝和将记录错误。
Log output
Percona XtraDB群集不支持MySQL数据库中的表作为日志输出的目标。
默认日志条目写入文件。此验证将检查log_output 变量的值。
根据所选模式,会发生以下情况:
DISABLED
在启动时,不执行验证。
在运行时,可以将log_output设置为任何值。
PERMISSIVE
在启动时,如果log_output仅设置为TABLE,则将记录警告并继续启动。
在运行时,允许将log_output更改为任何值,但如果将它仅设置为TABLE,一个警告。
ENFORCING 或 MASTER
在启动时,如果log_output仅设置为TABLE,则会记录错误并中止启动。
在运行时,将log_output更改为TABLE的任何尝试都将失败,并记录错误。
Explicit table locking
Percona XtraDB Cluster只有对显式表锁定操作的实验性支持,以下不可取操作导致显式表锁定,并由此验证覆盖:
• LOCK TABLES
• GET_LOCK() and RELEASE_LOCK()
• FLUSH TABLES <tables> WITH READ LOCK
• Setting the SERIALIZABLE transaction level
根据所选模式,会发生以下情况:
DISABLED or MASTER
在启动时,不执行验证。
在运行时,允许所有操作。
PERMISSIVE
在启动时,不执行验证。
在运行时,允许所有操作,但在执行不良操作时会记录警告。
ENFORCING
在启动时,不执行验证。
在运行时,拒绝任何不需要的操作,并记录错误。
Auto-increment lock mode
用于生成auto-increment值的锁定模式必须交错,以确保每个节点生成唯一的(但非顺序)标识符。
此验证将检查innodb_autoinc_lock_mode变量的值。
默认情况下,设置变量到1(连续锁定模式),但应该设置为2(交错锁定模式)。
根据所选的严格模式,会发生以下情况:
DISABLED
在启动时,不执行验证。
PERMISSIVE
在启动时,如果innodb_autoinc_lock_mode未设置为2,则将记录警告并继续启动。
ENFORCING or MASTER
在启动时,如果innodb_autoinc_lock_mode未设置为2,则会记录错误并中止启动。
注意:此验证不在运行时执行,因为innodb_autoinc_lock_mode变量不能动态设置。
Combining schema and data changes in a single statement
Percona XtraDB群集不支持CREATE TABLE ... AS SELECT(CTAS)语句,因为它们结合模式和数据更改。
根据所选模式,会发生以下情况:
DISABLED
在启动时,不执行验证。
在运行时,允许所有操作。
PERMISSIVE
在启动时,不会验证。
在运行时,允许所有操作,但在执行CTAS操作时将记录警告。
ENFORCING
在启动时,不执行验证。
在运行时,拒绝任何CTAS操作,并记录错误。