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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据和云

Oracle 12.2新特性掌上手册 - 第一卷 Availability

注:文章内容来自官方文档翻译。若需要了解更多,请查阅官方文档。 1、Multi-Instance Redo Apply (多实例redo应用) 在Oracle ...

3936
来自专栏散尽浮华

Linux下修改系统编码的操作记录

Linux系统安装后,发现中文显示乱码。因为系统编码为en_US.UTF-8,应改为支持中文的编码(即zh_CN.UTF-8) 操作记录如下: 0)系统必须安装...

3145
来自专栏CaiRui

xtrabackup使用

转自:https://www.cnblogs.com/waynechou/p/xtrabackup_backup.html 阅读目录 xtrabackup 选项...

67510
来自专栏撸码那些事

MySQL主从复制——主库已有数据的解决方案

在上篇文章中我们介绍了基于Docker的Mysql主从搭建,一主多从的搭建过程就是重复了一主一从的从库配置过程,需要注意的是,要保证主从库my.cnf中serv...

1762
来自专栏Hadoop实操

如何配置Kerberos服务的高可用

在前面的文章中Fayson介绍过《如何在CDH集群启用Kerberos》,对于一个启用了Kerberos的正式生产系统,还需要考虑KDC的高可用。而Kerber...

6799
来自专栏沃趣科技

mysqldump与innobackupex备份过程你知多少(三)

相关阅读: mysqldump与innobackupex备份过程你知多少(二) mysqldump与innobackupex备份过程你知多少(一) mysqld...

50413
来自专栏java一日一条

理解MySQL——复制(Replication)

1、复制概述 1.1、复制解决的问题 数据复制技术有以下一些特点: (1) 数据分布 (2) 负载平衡(load balancing) (3) ...

923
来自专栏乐沙弥的世界

记一次SQL server 2005 到SQL server 2008 数据库迁移

    最近周末完成了一个从SQL server 2005升级到SQL server 2008的升级迁移,其实质是一个服务器迁移的过程。比较复杂的是这个服务器上...

1764
来自专栏耕耘实录

Zabbix最佳实践一:Zabbix4.0.2的安装与配置

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

7323
来自专栏性能与架构

InnoDB 日志文件大小设为多大合适?

InnoDB 日志文件的作用 Innodb 数据表崩溃后,再次启动时,MySQL会扫描日志文件,看哪些记录不在表空间中,对其进行 redo 操作,从而完成数据恢...

85011

扫码关注云+社区

领取腾讯云代金券