Percona XtraDB Cluster Strict Mode(PXC 5.7)
在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)的更多相关文章
- Percona XtraDB Cluster高可用与状态快照传输(PXC 5.7 )
Percona XtraDB Cluster(下称PXC)高可用集群支持任意节点在运行期间的重启,升级或者意外宕机,即它解决了单点故障问题.那在这个意外宕机或者重启期间,该节点丢失的数据如何再次进行同 ...
- Installing Percona XtraDB Cluster on CentOS
PXC简介 Percona XtraDB Cluster(简称PXC集群)提供了MySQL高可用的一种实现方法. 1.集群是有节点组成的,推荐配置至少3个节点,但是也可以运行在2个节点上. 2.每个节 ...
- PXC(Percona XtraDB Cluster)集群的安装与配置
Percona XtraDB Cluster是针对MySQL用户的高可用性和扩展性解决方案,基于Percona Server .其包括了Write Set REPlication补丁,使用Galera ...
- mysql高可用之PXC(Percona XtraDB Cluster)
简介 Percona XtraDB Cluster是MySQL高可用性和可扩展性的解决方案,Percona XtraDB Cluster提供的特性如下: 1).同步复制,事务要么在所有节点提交或不提交 ...
- docker1.12 安装pxc(Percona XtraDB Cluster )测试
docker1.12 安装pxc(Percona XtraDB Cluster )测试
- MySQL高可用方案-PXC(Percona XtraDB Cluster)环境部署详解
MySQL高可用方案-PXC(Percona XtraDB Cluster)环境部署详解 Percona XtraDB Cluster简称PXC.Percona Xtradb Cluster的实现是在 ...
- Percona XtraDB Cluster 的一些使用限制(PXC 5.7)
Percona XtraDB Cluster有众多的优秀特性,使得mysql集群得以轻松实现.但是不要忽略了它的一些限制.如果你无法接受,或者你的应用程序或数据库(比如使用了memory引擎)对限制无 ...
- 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 ...
- Percona XtraDB Cluster(PXC) -集群环境安装
Percona XtraDB Cluster(PXC) ---服务安装篇 1.测试环境搭建: Ip 角色 OS PXC-version 172.16.40.201 Node1 Redhat/C ...
随机推荐
- C/S与B/S的区别
C/S与B/S的区别 1.区别 1.B/S架构是针对C/S架构缺点进行改进后提出的网络结构模式. B/S结构属于C/S结构,是一种特殊的C/S,因为浏览器只是特殊的客户端. 2.C/S可以使用任何通信 ...
- Windows IIS服务挂载NAS共享文件存储
本文介绍如何结合阿里云NAS的SMB协议支持和ECS Windows虚拟机,使用Windows内置的互联网信息服务(IIS)来提供Web和FTP服务. 阿里云文件存储服务NAS主要面向阿里云ECS 实 ...
- Oracle 11g 静默安装脚本
#!/bin/bash####安装Oracle所需依赖包function install_yum(){ yum -y install $1} i="perl-Data-Dumper lvm ...
- 配置阿里云docker镜像地址
{ "registry-mirrors": [ "https://kfwkfulq.mirror.aliyuncs.com", "https://2l ...
- Unity发布WebGl注意事项
unity 版本是5.5,不过看了2017的文档好像也是差不多,绝大部分都是根据官方文档,希望有帮助,如果有错误或者你知道更多这方面的只是,请告知下,大恩言谢. 1:对webgl发布的工程文件说明 ...
- 马凯军201771010116《面向对象程序设计(java)》第一周学习总结
马凯军201771010116<面向对象程序设计(java)>第一周学习总结 第一部分:课程准备部分 填写课程学习 平台注册账号, 平台名称 注册账号 博客园:www.cnblogs.co ...
- wpf 控件简单介绍
- ecmall 移动端 微信分享
/* 用户判断是否在微信端 */ $this->assign('isWeixin', isWeixin()); //isWeixin() 在系统核心基础类的ecmall.php里定义好了 是微信 ...
- Linux命令行下:把程序放后台执行,以及从后台继续执行程序
把任务放到后台用 & 和 Ctrl+z 让后台任务从停止状态转为运行状态用 bg %N 把后台任务调回到前台用 fg %N 查看所有任务用jobs
- 购物车存到cookie
为什么不存session? 首先,session存在时间限制,会定期清空的,而cookie如果不主动清或者设置定期则不会清楚: session存放在服务器端,cookie存放在客户端浏览器. 购物车存 ...