Documentation Home
MySQL 9.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 41.2Mb
PDF (A4) - 41.3Mb
Man Pages (TGZ) - 262.8Kb
Man Pages (Zip) - 368.8Kb
Info (Gzip) - 4.1Mb
Info (Zip) - 4.1Mb


MySQL 9.4 Reference Manual  / ...  / Functions and Operators  / Replication Functions  /  Functions Used with Global Transaction Identifiers (GTIDs)

14.18.2 Functions Used with Global Transaction Identifiers (GTIDs)

The functions described in this section are used with GTID-based replication. It is important to keep in mind that all of these functions take string representations of GTID sets as arguments. As such, the GTID sets must always be quoted when used with them. SeeGTID Sets for more information.

The union of two GTID sets is simply their representations as strings, joined together with an interposed comma. In other words, you can define a very simple function for obtaining the union of two GTID sets, similar to that created here:

CREATE FUNCTION GTID_UNION(g1 TEXT, g2 TEXT)    RETURNS TEXT DETERMINISTIC    RETURN CONCAT(g1,',',g2);

For more information about GTIDs and how these GTID functions are used in practice, seeSection 19.1.3, “Replication with Global Transaction Identifiers”.

Table 14.26 GTID Functions

NameDescription
WAIT_FOR_EXECUTED_GTID_SET() Wait until the given GTIDs have executed on the replica.

  • GTID_SUBSET(set1,set2)

    Given two sets of global transaction identifiersset1 andset2, returns true if all GTIDs inset1 are also inset2. ReturnsNULL ifset1 orset2 isNULL. Returns false otherwise.

    The GTID sets used with this function are represented as strings, as shown in the following examples:

    mysql> SELECT GTID_SUBSET('3E11FA47-71CA-11E1-9E33-C80AA9429562:23',    ->     '3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57')\G*************************** 1. row ***************************GTID_SUBSET('3E11FA47-71CA-11E1-9E33-C80AA9429562:23',    '3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57'): 11 row in set (0.00 sec)mysql> SELECT GTID_SUBSET('3E11FA47-71CA-11E1-9E33-C80AA9429562:23-25',    ->     '3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57')\G*************************** 1. row ***************************GTID_SUBSET('3E11FA47-71CA-11E1-9E33-C80AA9429562:23-25',    '3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57'): 11 row in set (0.00 sec)mysql> SELECT GTID_SUBSET('3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25',    ->     '3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57')\G*************************** 1. row ***************************GTID_SUBSET('3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25',    '3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57'): 01 row in set (0.00 sec)
  • GTID_SUBTRACT(set1,set2)

    Given two sets of global transaction identifiersset1 andset2, returns only those GTIDs fromset1 that are not inset2. ReturnsNULL ifset1 orset2 isNULL.

    All GTID sets used with this function are represented as strings and must be quoted, as shown in these examples:

    mysql> SELECT GTID_SUBTRACT('3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57',    ->     '3E11FA47-71CA-11E1-9E33-C80AA9429562:21')\G*************************** 1. row ***************************GTID_SUBTRACT('3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57',    '3E11FA47-71CA-11E1-9E33-C80AA9429562:21'): 3e11fa47-71ca-11e1-9e33-c80aa9429562:22-571 row in set (0.00 sec)mysql> SELECT GTID_SUBTRACT('3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57',    ->     '3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25')\G*************************** 1. row ***************************GTID_SUBTRACT('3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57',    '3E11FA47-71CA-11E1-9E33-C80AA9429562:20-25'): 3e11fa47-71ca-11e1-9e33-c80aa9429562:26-571 row in set (0.00 sec)mysql> SELECT GTID_SUBTRACT('3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57',    ->     '3E11FA47-71CA-11E1-9E33-C80AA9429562:23-24')\G*************************** 1. row ***************************GTID_SUBTRACT('3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57',    '3E11FA47-71CA-11E1-9E33-C80AA9429562:23-24'): 3e11fa47-71ca-11e1-9e33-c80aa9429562:21-22:25-571 row in set (0.01 sec)

    Subtracting a GTID set from itself produces an empty set, as shown here:

    mysql> SELECT GTID_SUBTRACT('3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57',    ->     '3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57')\G*************************** 1. row ***************************GTID_SUBTRACT('3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57',    '3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57'): 1 row in set (0.00 sec)
  • WAIT_FOR_EXECUTED_GTID_SET(gtid_set[,timeout])

    Wait until the server has applied all of the transactions whose global transaction identifiers are contained ingtid_set; that is, until the condition GTID_SUBSET(gtid_subset,@@GLOBAL.gtid_executed) holds. SeeSection 19.1.3.1, “GTID Format and Storage” for a definition of GTID sets.

    If a timeout is specified, andtimeout seconds elapse before all of the transactions in the GTID set have been applied, the function stops waiting.timeout is optional, and the default timeout is 0 seconds, in which case the function always waits until all of the transactions in the GTID set have been applied.timeout must be greater than or equal to 0; when running in strict SQL mode, a negativetimeout value is immediately rejected with an error (ER_WRONG_ARGUMENTS); otherwise the function returnsNULL, and raises a warning.

    WAIT_FOR_EXECUTED_GTID_SET() monitors all the GTIDs that are applied on the server, including transactions that arrive from all replication channels and user clients. It does not take into account whether replication channels have been started or stopped.

    For more information, seeSection 19.1.3, “Replication with Global Transaction Identifiers”.

    GTID sets used with this function are represented as strings and so must be quoted as shown in the following example:

    mysql> SELECT WAIT_FOR_EXECUTED_GTID_SET('3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5');        -> 0

    For a syntax description for GTID sets, seeSection 19.1.3.1, “GTID Format and Storage”.

    ForWAIT_FOR_EXECUTED_GTID_SET(), the return value is the state of the query, where 0 represents success, and 1 represents timeout. Any other failures generate an error.

    gtid_mode cannot be changed to OFF while any client is using this function to wait for GTIDs to be applied.