在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. 索引(B-树)

    前言 本文是在讲述什么样的数据结构适合作为索引,以及其适合作为索引的原因.而阅读本文需要对B树和B+树结构有稍微的理解.以及需要对磁盘操作知识有稍微的了解.对于磁盘操作的相关知识,在文章尾部的链接文章 ...

  2. mstOne

    云鸟(2017年6月6日) 1.html标签语义化的好处 a:利于seo优化 b:在样式丢失的时候,还是可以比较好的呈现结构 c:更好的支持各种终端,例如无障碍阅读和有声小说等. d:利于团队开发和维 ...

  3. 使用 udev 高效、动态地管理 Linux 设备文件

    本文转自:https://www.ibm.com/developerworks/cn/linux/l-cn-udev/index.html 概述: Linux 用户常常会很难鉴别同一类型的设备名,比如 ...

  4. overload(重载)和override(覆盖)的注意点

    使用overload(重载)的几个注意点: 在使用重载时只能通过不同的参数形式.例如:不同的参数类型,不同的参数个数,不同的参数顺序,当然,同一个方法内的几个参数类型必须不一样.例如可以是fun(in ...

  5. Linux磁盘空间满了的排查与解决思路

    block正常满 (磁盘实际不足)inode 满 大量的小文件block 满 文件没有被彻底删除(硬链接数0 进程调用数不为0) 解放方法: 1 查看df -h 磁盘使用量根据占用量大小逐步逐步排查 ...

  6. SharePoint REST API - 同步SharePoint列表项

    博客地址:http://blog.csdn.net/FoxDave 本篇只讲REST服务中的GetListItemChangesSinceToken这个东西.何谓同步呢,你也可以理解为增量变化,即 ...

  7. ionic1 添加百度地图插件 cordova-plugin-baidumaplocation

    cordova-plugin-baidumaplocation 这个插件返回的数据是 json 格式的  可以直接获取  android 和 ios 都可用 1.先去百度地图平台去创建应用  获取访问 ...

  8. 著名的Log4j是怎么来的?

    Java在设计之初,借鉴了很多其他语言不错的特性和优点,唯独没有设计日志系统,但是日志的重要性不言而喻,一旦程序运行起来,运行结果与预期不一致,基本就是出Bug了,这个时候需要进行Bug排查,一般有两 ...

  9. Django App(五) load static files

    经过前面4篇的努力,已经基本完成了,polls站点的功能,但是所有界面都没有涉及样式,和JavaScript的导入.到目前为止了解到的Django是通过解析Url来完成对客户端的响应的,那么组成站点所 ...

  10. 产品经理面试题——浅谈O2O

    分析:O2O也要分种类.      现在的O2O 已经是线上线下相互融合的阶段了,无论是线上体验,线下消费还是线下体验,线上下单.都已有比较成熟的模式.我对O2O的理解就是以消费者为中心,整合线上和线 ...