在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

Percona XtraDB Cluster Strict Mode(PXC 5.7)的更多相关文章

  1. Percona XtraDB Cluster高可用与状态快照传输(PXC 5.7 )

    Percona XtraDB Cluster(下称PXC)高可用集群支持任意节点在运行期间的重启,升级或者意外宕机,即它解决了单点故障问题.那在这个意外宕机或者重启期间,该节点丢失的数据如何再次进行同 ...

  2. Installing Percona XtraDB Cluster on CentOS

    PXC简介 Percona XtraDB Cluster(简称PXC集群)提供了MySQL高可用的一种实现方法. 1.集群是有节点组成的,推荐配置至少3个节点,但是也可以运行在2个节点上. 2.每个节 ...

  3. PXC(Percona XtraDB Cluster)集群的安装与配置

    Percona XtraDB Cluster是针对MySQL用户的高可用性和扩展性解决方案,基于Percona Server .其包括了Write Set REPlication补丁,使用Galera ...

  4. mysql高可用之PXC(Percona XtraDB Cluster)

    简介 Percona XtraDB Cluster是MySQL高可用性和可扩展性的解决方案,Percona XtraDB Cluster提供的特性如下: 1).同步复制,事务要么在所有节点提交或不提交 ...

  5. docker1.12 安装pxc(Percona XtraDB Cluster )测试

    docker1.12 安装pxc(Percona XtraDB Cluster )测试

  6. MySQL高可用方案-PXC(Percona XtraDB Cluster)环境部署详解

    MySQL高可用方案-PXC(Percona XtraDB Cluster)环境部署详解 Percona XtraDB Cluster简称PXC.Percona Xtradb Cluster的实现是在 ...

  7. Percona XtraDB Cluster 的一些使用限制(PXC 5.7)

    Percona XtraDB Cluster有众多的优秀特性,使得mysql集群得以轻松实现.但是不要忽略了它的一些限制.如果你无法接受,或者你的应用程序或数据库(比如使用了memory引擎)对限制无 ...

  8. 15、高可用 PXC(percona xtradb cluster) 搭建

    安装环境: 集群名 pxc_lk 节点1: 192.168.1.20 节点2: 192.168.1.21 节点3: 192.168.1.22   所有节点安装 wget http://www.perc ...

  9. Percona XtraDB Cluster(PXC) -集群环境安装

    Percona XtraDB Cluster(PXC)   ---服务安装篇   1.测试环境搭建: Ip 角色 OS PXC-version 172.16.40.201 Node1 Redhat/C ...

随机推荐

  1. Weka中数据挖掘与机器学习系列之Weka系统安装(四)

    能来看我这篇博客的朋友,想必大家都知道,Weka采用Java编写的,因此,具有Java“一次编译,到处运行”的特性.支持的操作系统有Windows x86.Windows x64.Mac OS X.L ...

  2. Win10系列:C#应用控件基础18

    WebView控件 使用WebView控件可以在应用中添加一个简易的网页浏览器窗口,将指定地址的网页内容显示出来,并可以通过WebView控件所提供的方法.属性及事件,实现如页面导航.HTML文本解析 ...

  3. Spring Boot 2.0尝鲜-动态 Banner

    配置依赖 使用 Spring Boot 2.0 首先需要将项目依赖包替换为刚刚发布的 2.0 RELEASE,现在网站https://start.spring.io/也将 Spring Boot 2. ...

  4. 第一个Spring 程序

    一 搭建好开发环境 JDK Eclipse 等 二 下载jar包 https://commons.apache.org/logging/ https://repo.spring.io/release/ ...

  5. Problem A: 类的初体验

    Description 定义一个类Data,只有一个double类型的属性和如下3个方法: 1.    void init(double d);——初始化属性值. 2.   double getVal ...

  6. Oracle启动和归档模式

    数据库运行 Oracle数据库的完整启动过程是分步骤完成的,包含以下3个步骤: 启动实例–>加载数据库–>打开数据库 因为Oracle数据库启动过程中不同的阶段可以对数据库进行不同的维护操 ...

  7. @Autowired Map<String , Object> xx

    http://www.cnblogs.com/davidwang456/p/4432410.html @Autowired 标注作用于 Map 类型时,如果 Map 的 key 为 String 类型 ...

  8. Android & iOS 启动画面工具

    感谢Aone!为我们开发了如此便捷的工具!! 以下为原文:  Android & iOS 启动画面工具 下载:OneSplash.启动画面工具.Aone.20190318.zip 说明:这一个 ...

  9. offsetWidth与clientWidth 区别

    offsetWidth       //元素宽度.内边距和边框,不包括外边距 offsetHeight      //元素高度.内边距和边框,不包括外边距 clientWidth        //元 ...

  10. 基于Verilog的串口接收程序

    一.模块框图及基本思路 detect_module:检测输入引脚的下降沿,以此判断一帧数据的开始 rx_bps_module:波特率时钟产生模块 rx_control_module:串口接收的核心控制 ...