在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. python -- 面向对象 - 反射

    1.isinstance ,type, issubclass       isinstance:判断给的对象是否是**类型       type:返回**对象的数据类型       issubclas ...

  2. Python—字典的操作

    字典的操作: #字典的本质其实是dict类的对象 >>> a = dict([(")]) >>> a {'} 一.增加 >>> stud ...

  3. 本地jar包安装到本地仓库

    将本地jar包安装到本地仓库中,记得参数上有双引号 mvn install:install-file -Dfile="jar全路径" -DgroupId="groupId ...

  4. Windows和Linux下 Java开发ping工具类

    package com.test.util; import java.io.BufferedReader; import java.io.IOException; import java.io.Inp ...

  5. Tomcat和java的安装

    java开发环境搭建1.将普通用户添加到sudoers中    进入root模式        编辑添加            visudo            username ALL=(ALL) ...

  6. python3入门教程(一)之 hello world

    概述 python 这门语言这几年非常的火,很多技术都用的到,像爬虫,大数据,人工智能等,包括很多的小孩都首选python作为入门学习语言,那python 究竟是怎样一门语言呢? Python 是一个 ...

  7. 2.7 清除FTP服务器文件

    清除服务器文件 from ftptools import FtpTools class CleanAll(FtpTools): '''delete an entire remote tree of s ...

  8. 长字符串换行word-break

    word-break: break-all,每个字符换行 word-break: break-word按照单词换行,长字符之间换行

  9. centos 解决中文支持问题, 如此修改可以修正eclipse 乱码问题。

    一.中文支持 安装中文语言包: yum groupinstall chinese-support 修改字符编码配置,没有这个文件就创建它: vim /etc/sysconfig/i18n 为 LANG ...

  10. 福大软工 · 第十二次作业 - Beta答辩总结之拖鞋旅游队

    目录 前言 项目的链接与宣传 项目总结 原计划 达成情况 原因分析 [ Beta 冲刺博客链接汇总] [燃尽图] Beta版本展示 使用说明 视频展示 图片展示 答辩总结 [团队中个人的贡献比例] [ ...