Spec-Zone.ru › MySQL 8.4

14.18.2 Функции, используемые с идентификаторами глобальных транзакций (GTID)

Функции, описанные в этом разделе, используются с репликацией на основе GTID. Важно помнить, что все эти функции принимают строковые представления наборов GTID в качестве аргументов. Следовательно, наборы GTID всегда должны быть заключены в кавычки при использовании с ними. Для получения дополнительной информации см. Наборы GTID.

Объединение двух наборов GTID — это просто их представления в виде строк, соединенные запятой. Другими словами, вы можете определить очень простую функцию для получения объединения двух наборов GTID, подобную той, что создана здесь:

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

Дополнительную информацию о GTID и о том, как эти функции GTID используются на практике, см. в разделе 19.1.3 «Репликация с идентификаторами глобальных транзакций».

Таблица 14.26 Функции GTID

Таблица 14.26 Функции GTID
Имя Описание
WAIT_FOR_EXECUTED_GTID_SET() Ожидание выполнения заданных GTID на реплике.

  • GTID_SUBSET(set1,set2)

    Принимая два набора глобальных идентификаторов транзакций set1 и set2, возвращает true, если все GTID в set1 также находятся в set2. Возвращает NULL, если set1 или set2 имеют значение NULL. В противном случае возвращает false.

    Наборы GTID, используемые с этой функцией, представлены в виде строк, как показано в следующих примерах:

    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'): 1
    1 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'): 1
    1 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'): 0
    1 row in set (0.00 sec)
    
  • GTID_SUBTRACT(set1,set2)

    Принимая два набора глобальных идентификаторов транзакций set1 и set2, возвращает только те GTID из set1, которые не находятся в set2. Возвращает NULL, если set1 или set2 имеют значение NULL.

    Все наборы GTID, используемые с этой функцией, представлены в виде строк и должны быть заключены в кавычки, как показано в этих примерах:

    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-57
    1 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-57
    1 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-57
    1 row in set (0.01 sec)
    

    Вычитание набора GTID из самого себя даёт пустой набор, как показано здесь:

    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])

    Ожидает, пока сервер применит все транзакции, идентификаторы которых содержатся в gtid_set; то есть, пока выполняется условие GTID_SUBSET(gtid_subset, @@GLOBAL.gtid_executed). Определение наборов GTID см. в разделе 19.1.3.1 «Формат и хранение GTID».

    Если указан таймаут и он истекает (timeout секунд), прежде чем все транзакции в наборе GTID будут применены, функция прекращает ожидание. timeout необязательно, и по умолчанию таймаут составляет 0 секунд, в этом случае функция всегда ожидает, пока все транзакции в наборе GTID будут применены. timeout должно быть больше или равно 0; при выполнении в строгом режиме SQL отрицательное значение timeout сразу же отклоняется с ошибкой; в противном случае функция возвращает NULL и поднимает предупреждение.

    WAIT_FOR_EXECUTED_GTID_SET() отслеживает все применяемые на сервере GTID, включая транзакции, поступающие со всех каналов репликации и от пользовательских клиентов. Она не учитывает, были ли каналы репликации начаты или остановлены.

    Для получения дополнительной информации см. раздел 19.1.3 «Репликация с идентификаторами глобальных транзакций».

    Наборы GTID, используемые с этой функцией, представлены в виде строк, поэтому они должны быть заключены в кавычки, как показано в следующем примере:

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

    Описание синтаксиса наборов GTID см. в разделе 19.1.3.1 «Формат и хранение GTID».

    Для WAIT_FOR_EXECUTED_GTID_SET() возвращаемое значение — это состояние запроса, где 0 обозначает успех, а 1 — таймаут. Любые другие ошибки генерируют ошибку.

    gtid_mode не может быть изменено на OFF, пока какой-либо клиент использует эту функцию для ожидания применения GTID.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/gtid-functions.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API