Rechercher dans le manuel MySQL
17.1.6.5 Global Transaction ID Options and Variables
The MySQL Server options and system variables described in this section are used to monitor and control Global Transaction Identifiers (GTIDs).
For additional information, see Section 17.1.3, “Replication with Global Transaction Identifiers”.
Startup Options Used with GTID Replication
The following server startup options are used with GTID-based replication:
-
Property Value Command-Line Format --enforce-gtid-consistency[=value]
System Variable enforce_gtid_consistency
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Enumeration Default Value OFF
Valid Values OFF
ON
WARN
When enabled, the server enforces GTID consistency by allowing execution of only statements that can be safely logged using a GTID. You must set this option to
ON
before enabling GTID based replication.The values that
--enforce-gtid-consistency
can be configured to are:OFF
: all transactions are allowed to violate GTID consistency.ON
: no transaction is allowed to violate GTID consistency.WARN
: all transactions are allowed to violate GTID consistency, but a warning is generated in this case.
Setting
--enforce-gtid-consistency
without a value is an alias for--enforce-gtid-consistency=ON
. This impacts on the behavior of the variable, seeenforce_gtid_consistency
.Only statements that can be logged using GTID safe statements can be logged when
enforce-gtid-consistency
is set toON
, so the operations listed here cannot be used with this option:CREATE TABLE ... SELECT
statementsCREATE TEMPORARY TABLE
orDROP TEMPORARY TABLE
statements inside transactionsTransactions or statements that update both transactional and nontransactional tables. There is an exception that nontransactional DML is allowed in the same transaction or in the same statement as transactional DML, if all nontransactional tables are temporary.
--enforce-gtid-consistency
only takes effect if binary logging takes place for a statement. If binary logging is disabled on the server, or if statements are not written to the binary log because they are removed by a filter, GTID consistency is not checked or enforced for the statements that are not logged.For more information, see Section 17.1.3.6, “Restrictions on Replication with GTIDs”.
--executed-gtids-compression-period
Property Value Command-Line Format --executed-gtids-compression-period=#
Deprecated Yes Type Integer Default Value 1000
Minimum Value 0
Maximum Value 4294967295
This option is deprecated and will be removed in a future MySQL release. Use the renamed gtid_executed_compression_period to control how the gtid_executed table is compressed.
-
Property Value Command-Line Format --gtid-mode=MODE
System Variable gtid_mode
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Enumeration Default Value OFF
Valid Values OFF
OFF_PERMISSIVE
ON_PERMISSIVE
ON
This option specifies whether global transaction identifiers (GTIDs) are used to identify transactions. Setting this option to
--gtid-mode=ON
requires thatenforce-gtid-consistency
be set toON
. Thegtid_mode
variable is dynamic and enables GTID based replication to be configured online. Before using this feature, see Section 17.1.5, “Changing Replication Modes on Online Servers”. --gtid-executed-compression-period
Property Value Command-Line Format --gtid-executed-compression-period=#
Type Integer Default Value 1000
Minimum Value 0
Maximum Value 4294967295
Compress the
mysql.gtid_executed
table each time this many transactions have taken place. A setting of 0 means that this table is not compressed. No compression of the table occurs when binary logging is enabled, therefore the option has no effect unlesslog_bin
isOFF
.See mysql.gtid_executed Table Compression, for more information.
The following system variables are used with GTID-based replication:
-
Property Value Command-Line Format --binlog-gtid-simple-recovery
System Variable binlog_gtid_simple_recovery
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Boolean Default Value TRUE
This variable controls how binary log files are iterated during the search for GTIDs when MySQL starts or restarts.
When
binlog_gtid_simple_recovery=FALSE
, the method of iterating the binary log files is:To initialize
gtid_executed
, binary log files are iterated from the newest file, stopping at the first binary log that has anyPrevious_gtids_log_event
. All GTIDs fromPrevious_gtids_log_event
andGtid_log_events
are read from this binary log file. This GTID set is stored internally and calledgtids_in_binlog
. The value ofgtid_executed
is computed as the union of this set and the GTIDs stored in themysql.gtid_executed
table.This process could take a long time if you had a large number of binary log files without GTID events, for example created when
gtid_mode=OFF
.To initialize
gtid_purged
, binary log files are iterated from the oldest to the newest, stopping at the first binary log that contains either aPrevious_gtids_log_event
that is non-empty (that has at least one GTID) or that has at least oneGtid_log_event
. From this binary log it readsPrevious_gtids_log_event
. This GTID set is subtracted fromgtids_in_binlog
and the result stored in the internal variablegtids_in_binlog_not_purged
. The value ofgtid_purged
is initialized to the value ofgtid_executed
, minusgtids_in_binlog_not_purged
.
When
binlog_gtid_simple_recovery=TRUE
, which is the default, the server iterates only the oldest and the newest binary log files and the values ofgtid_purged
andgtid_executed
are computed based only onPrevious_gtids_log_event
orGtid_log_event
found in these files. This ensures only two binary log files are iterated during server restart or when binary logs are being purged.NoteIf this option is enabled,
gtid_executed
andgtid_purged
may be initialized incorrectly in the following situations:The newest binary log was generated by MySQL 5.7.5 or older, and
gtid_mode
wasON
for some binary logs butOFF
for the newest binary log.A
SET GTID_PURGED
statement was issued on a MySQL version prior to 5.7.7, and the binary log that was active at the time of theSET GTID_PURGED
has not yet been purged.
If an incorrect GTID set is computed in either situation, it will remain incorrect even if the server is later restarted, regardless of the value of this option.
If you are using MySQL 5.7.7 or earlier, after issuing a
SET gtid_purged
statement note down the current binary log file name, which can be checked usingSHOW MASTER STATUS
. If the server is restarted before this file has been purged, then you should usebinlog_gtid_simple_recovery=FALSE
to avoidgtid_purged
orgtid_executed
being computed incorrectly. -
Property Value Command-Line Format --enforce-gtid-consistency[=value]
System Variable enforce_gtid_consistency
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Enumeration Default Value OFF
Valid Values OFF
ON
WARN
Depending on the value of this variable, the server enforces GTID consistency by allowing execution of only statements that can be safely logged using a GTID. You must set this variable to
ON
before enabling GTID based replication.The values that
enforce_gtid_consistency
can be configured to are:OFF
: all transactions are allowed to violate GTID consistency.ON
: no transaction is allowed to violate GTID consistency.WARN
: all transactions are allowed to violate GTID consistency, but a warning is generated in this case.
enforce_gtid_consistency
only takes effect if binary logging takes place for a statement. If binary logging is disabled on the server, or if statements are not written to the binary log because they are removed by a filter, GTID consistency is not checked or enforced for the statements that are not logged.For more information on statements that can be logged using GTID based replication, see
--enforce-gtid-consistency
.Prior to MySQL 5.7 and in early releases in that release series, the boolean
enforce_gtid_consistency
defaulted toOFF
. To maintain compatibility with these earlier releases, the enumeration defaults toOFF
, and setting--enforce-gtid-consistency
without a value is interpreted as setting the value toON
. The variable also has multiple textual aliases for the values:0=OFF=FALSE
,1=ON=TRUE
,2=WARN
. This differs from other enumeration types but maintains compatibility with the boolean type used in previous releases. These changes impact on what is returned by the variable. UsingSELECT @@ENFORCE_GTID_CONSISTENCY
,SHOW VARIABLES LIKE 'ENFORCE_GTID_CONSISTENCY'
, andSELECT * FROM INFORMATION_SCHEMA.VARIABLES WHERE 'VARIABLE_NAME' = 'ENFORCE_GTID_CONSISTENCY'
, all return the textual form, not the numeric form. This is an incompatible change, since@@ENFORCE_GTID_CONSISTENCY
returns the numeric form for booleans but returns the textual form forSHOW
and the Information Schema. executed_gtids_compression_period
Property Value Deprecated Yes System Variable executed_gtids_compression_period
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 1000
Minimum Value 0
Maximum Value 4294967295
This option is deprecated and will be removed in a future MySQL release. Use the renamed
gtid_executed_compression_period
to control how thegtid_executed
table is compressed.-
Property Value System Variable gtid_executed
System Variable gtid_executed
Scope Global Scope Global, Session Dynamic No Dynamic No SET_VAR
Hint AppliesNo SET_VAR
Hint AppliesNo Type String When used with global scope, this variable contains a representation of the set of all transactions executed on the server and GTIDs that have been set by a
SET
gtid_purged
statement. This is the same as the value of theExecuted_Gtid_Set
column in the output ofSHOW MASTER STATUS
andSHOW SLAVE STATUS
. The value of this variable is a GTID set, see GTID Sets for more information.When the server starts,
@@GLOBAL.gtid_executed
is initialized. Seebinlog_gtid_simple_recovery
for more information on how binary logs are iterated to populategtid_executed
. GTIDs are then added to the set as transactions are executed, or if anySET
gtid_purged
statement is executed.The set of transactions that can be found in the binary logs at any given time is equal to
GTID_SUBTRACT(@@GLOBAL.gtid_executed, @@GLOBAL.gtid_purged)
; that is, to all transactions in the binary log that have not yet been purged.Issuing
RESET MASTER
causes the global value (but not the session value) of this variable to be reset to an empty string. GTIDs are not otherwise removed from this set other than when the set is cleared due toRESET MASTER
.In some older releases, this variable could also be used with session scope, where it contained a representation of the set of transactions that are written to the cache in the current session. The session scope is now deprecated.
gtid_executed_compression_period
Property Value System Variable gtid_executed_compression_period
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Integer Default Value 1000
Minimum Value 0
Maximum Value 4294967295
Compress the
mysql.gtid_executed
table each time this many transactions have been processed. A setting of 0 means that this table is not compressed. Since no compression of the table occurs when using the binary log, setting the value of the variable has no effect unless binary logging is disabled.See mysql.gtid_executed Table Compression, for more information.
-
Property Value System Variable gtid_mode
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Enumeration Default Value OFF
Valid Values OFF
OFF_PERMISSIVE
ON_PERMISSIVE
ON
Controls whether GTID based logging is enabled and what type of transactions the logs can contain. You must have privileges sufficient to set global system variables. See Section 5.1.9.1, “System Variable Privileges”.
enforce_gtid_consistency
must be true before you can setgtid_mode=ON
. Before modifying this variable, see Section 17.1.5, “Changing Replication Modes on Online Servers”.Logged transactions can be either anonymous or use GTIDs. Anonymous transactions rely on binary log file and position to identify specific transactions. GTID transactions have a unique identifier that is used to refer to transactions. The different modes are:
OFF
: Both new and replicated transactions must be anonymous.OFF_PERMISSIVE
: New transactions are anonymous. Replicated transactions can be either anonymous or GTID transactions.ON_PERMISSIVE
: New transactions are GTID transactions. Replicated transactions can be either anonymous or GTID transactions.ON
: Both new and replicated transactions must be GTID transactions.
Changes from one value to another can only be one step at a time. For example, if
gtid_mode
is currently set toOFF_PERMISSIVE
, it is possible to change toOFF
orON_PERMISSIVE
but not toON
.The values of
gtid_purged
andgtid_executed
are persistent regardless of the value ofgtid_mode
. Therefore even after changing the value ofgtid_mode
, these variables contain the correct values. -
Property Value System Variable gtid_next
Scope Session Dynamic Yes SET_VAR
Hint AppliesNo Type Enumeration Default Value AUTOMATIC
Valid Values AUTOMATIC
ANONYMOUS
UUID:NUMBER
This variable is used to specify whether and how the next GTID is obtained.
Setting the session value of this system variable is a restricted operation. The session user must have privileges sufficient to set restricted session variables. See Section 5.1.9.1, “System Variable Privileges”.
gtid_next
can take any of the following values:AUTOMATIC
: Use the next automatically-generated global transaction ID.ANONYMOUS
: Transactions do not have global identifiers, and are identified by file and position only.A global transaction ID in
UUID
:NUMBER
format.
Exactly which of the above options are valid depends on the setting of
gtid_mode
, see Section 17.1.5.1, “Replication Mode Concepts” for more information. Setting this variable has no effect ifgtid_mode
isOFF
.After this variable has been set to
UUID
:NUMBER
, and a transaction has been committed or rolled back, an explicitSET GTID_NEXT
statement must again be issued before any other statement.DROP TABLE
orDROP TEMPORARY TABLE
fails with an explicit error when used on a combination of nontemporary tables with temporary tables, or of temporary tables using transactional storage engines with temporary tables using nontransactional storage engines. -
Property Value System Variable gtid_owned
Scope Global, Session Dynamic No SET_VAR
Hint AppliesNo Type String This read-only variable holds a list whose contents depend on its scope. When used with session scope, the list holds all GTIDs that are owned by this client; when used with global scope, it holds a list of all GTIDs along with their owners.
-
Property Value System Variable gtid_purged
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type String The set of all transactions that have been purged from the binary log. This is a subset of the set of transactions in
gtid_executed
. The value of this variable is a GTID set, see GTID Sets for more information.When the server starts, the global value of
gtid_purged
is initialized to a set of GTIDs. Seebinlog_gtid_simple_recovery
for more information on how binary logs are iterated to populategtid_purged
. IssuingRESET MASTER
causes the value of this variable to be reset to an empty string.There are two ways to set
gtid_purged
. Whengtid_set
is a superset ofgtid_purged
, and goes not intersect withgtid_subtract(gtid_executed - gtid_purged)
use:The result is that
GTID_PURGED
is set equal togtid_set
, andGTID_EXECUTED
becomes the union ofgtid_set
and the previous value ofGTID_EXECUTED
.When
gtid_set
does not intersect withgtid_executed
use:The result is that
gtid_set
is added to bothgtid_executed
andgtid_purged
.If binary logs from MySQL 5.7.7 or earlier exist, there is a chance that
gtid_purged
may be computed incorrectly withbinlog_gtid_simple_recovery=TRUE
. Seebinlog_gtid_simple_recovery
for more information. simplified_binlog_gtid_recovery
Property Value Command-Line Format --simplified-binlog-gtid-recovery
Deprecated Yes System Variable simplified_binlog_gtid_recovery
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Boolean Default Value FALSE
This option is deprecated and will be removed in a future MySQL release. Use the renamed
binlog_gtid_simple_recovery
to control how MySQL iterates through binary log files after a crash.
Traduction non disponible
Le manuel MySQL n'est pas encore traduit en français sur l'infobrol. Seule la version anglaise est disponible pour l'instant.
Document créé le 26/06/2006, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/mysql-rf-replication-options-gtids.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.