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
| Имя | Описание |
|---|---|
WAIT_FOR_EXECUTED_GTID_SET() | Ожидание выполнения заданных GTID на реплике. |
-
Принимая два набора глобальных идентификаторов транзакций
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) -
Принимая два набора глобальных идентификаторов транзакций
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.