Buy Percona ServicesBuy Now!

PXC Strict Mode

PXC Strict Mode is designed to avoid the use of experimental and unsupported features in Percona XtraDB Cluster. It performs a number of validations at startup and during runtime.

Depending on the actual mode you select, upon encountering a failed validation, the server will either throw an error (halting startup or denying the operation), or log a warning and continue running as normal. The following modes are available:

  • DISABLED: Do not perform strict mode validations and run as normal.
  • PERMISSIVE: If a vaidation fails, log a warning and continue running as normal.
  • ENFORCING: If a validation fails during startup, halt the server and throw an error. If a validation fails during runtime, deny the operation and throw an error.
  • MASTER: The same as ENFORCING except that the validation of explicit table locking is not performed. This mode can be used with clusters in which write operations are isolated to a single node.

By default, PXC Strict Mode is set to ENFORCING, except if the node is acting as a standalone server or the node is bootstrapping, then PXC Strict Mode defaults to DISABLED.

It is recommended to keep PXC Strict Mode set to ENFORCING, because in this case whenever Percona XtraDB Cluster encounters an experimental feature or an unsupported operation, the server will deny it. This will force you to re-evaluate your Percona XtraDB Cluster configuration without risking the consistency of your data.

If you are planning to set PXC Strict Mode to anything else than ENFORCING, you should be aware of the limitations and effects that this may have on data integrity. For more information, see Validations.

To set the mode, use the pxc_strict_mode variable in the configuration file or the --pxc-strict-mode option during mysqld startup.

Note

It is better to start the server with the necessary mode (the default ENFORCING is highly recommended). However, you can dynamically change it during runtime. For example, to set PXC Strict Mode to PERMISSIVE, run the following command:

mysql> SET pxc_strict_mode=PERMISSIVE;

Note

To further ensure data consistency, it is important to have all nodes in the cluster running with the same configuration, including the value of pxc_strict_mode variable.

Validations

PXC Strict Mode validations are designed to ensure optimal operation for common cluster setups that do not require experimental features and do not rely on operations not supported by Percona XtraDB Cluster.

Warning

If an unsupported operation is performed on a node with pxc_strict_mode set to DISABLED or PERMISSIVE, it will not be validated on nodes where it is replicated to, even if the destination node has pxc_strict_mode set to ENFORCING.

This section describes the purpose and consequences of each validation.

Storage engine

Percona XtraDB Cluster currently supports replication only for tables that use a transactional storage engine (XtraDB or InnoDB). To ensure data consistency, the following statements should not be allowed for tables that use a non-transactional storage engine (MyISAM, MEMORY, CSV, etc.):

  • Data manipulation statements that perform writing to table (for example, INSERT, UPDATE, DELETE, etc.)
  • The following administrative statements: CHECK, OPTIMIZE, REPAIR, and ANALYZE
  • TRUNCATE TABLE and ALTER TABLE

Depending on the selected mode, the following happens:

DISABLED

At startup, no validation is performed.

At runtime, all operations are permitted.

PERMISSIVE

At startup, no validation is perfromed.

At runtime, all operations are permitted, but a warning is logged when an undesirable operation is performed on an unsupported table.

ENFORCING or MASTER

At startup, no validation is performed.

At runtime, any undesirable operation performed on an unsupported table is denied and an error is logged.

Note

Unsupported tables can be converted to use a supported storage engine.

MyISAM replication

Percona XtraDB Cluster provides experimental support for replication of tables that use the MyISAM storage engine. Due to the non-transactional nature of MyISAM, it is not likely to ever be fully supported in Percona XtraDB Cluster.

MyISAM replication is controlled using the wsrep_replicate_myisam variable, which is set to OFF by default. Due to its unreliability, MyISAM replication should not be enabled if you want to ensure data consistency.

Depending on the selected mode, the following happens:

DISABLED

At startup, no validation is performed.

At runtime, you can set wsrep_replicate_myisam to any value.

PERMISSIVE

At startup, if wsrep_replicate_myisam is set to ON, a warning is logged and startup continues.

At runtime, it is permitted to change wsrep_replicate_myisam to any value, but if you set it to ON, a warning is logged.

ENFORCING or MASTER

At startup, if wsrep_replicate_myisam is set to ON, an error is logged and startup is aborted.

At runtime, any attempt to change wsrep_replicate_myisam to ON fails and an error is logged.

Note

The wsrep_replicate_myisam variable controls replication for MyISAM tables, and this validation only checks whether it is allowed. Undesirable operations for MyISAM tables are restricted using the Storage engine validation.

Binary log format

Percona XtraDB Cluster supports only the default row-based binary logging format. Setting the binlog_format [1] variable to anything but ROW at startup is not allowed, because this changes the global scope, which must be set to ROW. Validation is performed only at runtime and against session scope.

Depending on the selected mode, the following happens:

DISABLED

At runtime, you can set binlog_format to any value.

PERMISSIVE

At runtime, it is permitted to change binlog_format to any value, but if you set it to anything other than ROW, a warning is logged.

ENFORCING or MASTER

At runtime, any attempt to change binlog_format to anything other than ROW fails and an error is logged.

Tables without primary keys

Percona XtraDB Cluster cannot properly propagate certain write operations to tables that do not have primary keys defined. Undesirable operations include data manipulation statements that perform writing to table (especially DELETE).

Depending on the selected mode, the following happens:

DISABLED

At startup, no validation is performed.

At runtime, all operations are permitted.

PERMISSIVE

At startup, no validation is perfromed.

At runtime, all operations are permitted, but a warning is logged when an undesirable operation is performed on a table without an explicit primary key defined.

ENFORCING or MASTER

At startup, no validation is performed.

At runtime, any undesirable operation performed on a table without an explicit primary key is denied and an error is logged.

Log output

Percona XtraDB Cluster does not support tables in the MySQL database as the destination for log output. By default, log entries are written to file. This validation checks the value of the log_output [2] variable.

Depending on the selected mode, the following happens:

DISABLED

At startup, no validation is performed.

At runtime, you can set log_output to any value.

PERMISSIVE

At startup, if log_output is set only to TABLE, a warning is logged and startup continues.

At runtime, it is permitted to change log_output to any value, but if you set it only to TABLE, a warning is logged.

ENFORCING or MASTER

At startup, if log_output is set only to TABLE, an error is logged and startup is aborted.

At runtime, any attempt to change log_output only to TABLE fails and an error is logged.

Explicit table locking

Percona XtraDB Cluster has only experimental support for explicit table locking operations, The following undesirable operations lead to explicit table locking and are covered by this validation:

  • LOCK TABLES
  • GET_LOCK() and RELEASE_LOCK()
  • FLUSH TABLES <tables> WITH READ LOCK
  • Setting the SERIALIZABLE transaction level

Depending on the selected mode, the following happens:

DISABLED or MASTER

At startup, no validation is performed.

At runtime, all operations are permitted.

PERMISSIVE

At startup, no validation is performed.

At runtime, all operations are permitted, but a warning is logged when an undesirable operation is performed.

ENFORCING

At startup, no validation is performed.

At runtime, any undesirable operation is denied and an error is logged.

Auto-increment lock mode

The lock mode for generating auto-increment values must be interleaved to ensure that each node generates a unique (but non-sequential) identifier.

This validation checks the value of the innodb_autoinc_lock_mode [3] variable. By default, the variable is set to 1 (consecutive lock mode), but it should be set to 2 (interleaved lock mode).

Depending on the strict mode selected, the following happens:

DISABLED

At startup, no validation is performed.

PERMISSIVE

At startup, if innodb_autoinc_lock_mode is not set to 2, a warning is logged and startup continues.

ENFORCING or MASTER

At startup, if innodb_autoinc_lock_mode is not set to 2, an error is logged and startup is aborted.

Note

This validation is not performed during runtime, because the innodb_autoinc_lock_mode variable cannot be set dynamically.

Combining schema and data changes in a single statement

Percona XtraDB Cluster does not support CREATE TABLE ... AS SELECT (CTAS) statements, because they combine both schema and data changes.

Depending on the strict mode selected, the following happens:

DISABLED

At startup, no validation is performed.

At runtime, all operations are permitted.

PERMISSIVE

At startup, no validation is perfromed.

At runtime, all operations are permitted, but a warning is logged when a CTAS operation is performed.

ENFORCING

At startup, no validation is performed.

At runtime, any CTAS operation is denied and an error is logged.

References

[1]http://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html#sysvar_binlog_format
[2]http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_log_output
[3]http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_autoinc_lock_mode
This documentation is developed in Launchpad as part of the Percona XtraDB Cluster 5.7.
If you spotted inaccuracies, errors, don't understood it or you think something is missing or should be improved, please file a bug.
Visit Percona Store


General Inquiries

For general inquiries, please send us your question and someone will contact you.