16.1.6.5 Переменные системы для системы глобальных идентификаторов транзакций
Переменные системы MySQL Server, описанные в этом разделе, используются для мониторинга и управления глобальными идентификаторами транзакций (GTID). Дополнительную информацию см. в разделе 16.1.3 «Репликация с глобальными идентификаторами транзакций».
-
Формат командной строки --binlog-gtid-simple-recovery[={OFF|ON}]Переменная системы binlog_gtid_simple_recoveryОбласть действия Глобальная Динамическая Нет Тип Булево Значение по умолчанию ONЭта переменная управляет тем, как итерируются файлы двоичного журнала во время поиска GTID при запуске или перезапуске MySQL.
Когда
binlog_gtid_simple_recovery=TRUE, что является значением по умолчанию, значенияgtid_executedиgtid_purgedвычисляются во время запуска на основе значенийPrevious_gtids_log_eventв самых последних и самых старых файлах двоичного журнала. Описание вычисления см. в переменной системыgtid_purged. Это значение обращается только к двум файлам двоичного журнала во время перезапуска сервера. Если все двоичные журналы на сервере были сгенерированы с помощью MySQL 5.7.8 или более поздней версии, и вы используете MySQL 5.7.8 или более позднюю версию,binlog_gtid_simple_recovery=TRUEвсегда можно безопасно использовать.С
binlog_gtid_simple_recovery=TRUE,gtid_executedиgtid_purgedмогут быть инициализированы неправильно в следующих двух ситуациях:Самый новый двоичный журнал был сгенерирован MySQL 5.7.5 или более ранней версии, и
gtid_modeбылоONдля некоторых двоичных журналов, ноOFFдля самого нового двоичного журнала.Был выдан оператор
SET @@GLOBAL.gtid_purgedв MySQL 5.7.7 или более ранней версии, и двоичный журнал, активный в момент оператораSET @@GLOBAL.gtid_purged, ещё не был очищен.
Если в любой из этих ситуаций вычисляется некорректное множество GTID, оно остаётся некорректным даже после последующего перезапуска сервера с
binlog_gtid_simple_recovery=FALSE. Если какая-либо из этих ситуаций применима к серверу, задайтеbinlog_gtid_simple_recovery=FALSEдо запуска или перезапуска сервера. Для проверки второй ситуации, если вы используете MySQL 5.7.7 или более раннюю версию, после выполнения оператораSET @@GLOBAL.gtid_purgedзапишите текущее имя файла двоичного журнала, которое можно проверить с помощьюSHOW MASTER STATUS. Если сервер перезапускается до того, как этот файл был очищен, вам следует установитьbinlog_gtid_simple_recovery=FALSE.Когда
binlog_gtid_simple_recovery=FALSEустановлено, метод вычисленияgtid_executedиgtid_purged, как описано в переменной системыgtid_purged, изменяется на итерацию файлов двоичного журнала следующим образом:Вместо использования значения
Previous_gtids_log_eventи событий журнала GTID из самого нового файла двоичного журнала, вычисление дляgtid_executedитерируется с самого нового файла двоичного журнала и использует значениеPrevious_gtids_log_eventи любые события журнала GTID из первого файла двоичного журнала, где оно находит значениеPrevious_gtids_log_event. Если самые последние файлы двоичного журнала сервера не содержат событий журнала GTID, например, еслиgtid_mode=ONиспользовалось, но сервер был позже изменён наgtid_mode=OFF, этот процесс может занять много времени.Вместо использования значения
Previous_gtids_log_eventиз самого старого файла двоичного журнала, вычисление дляgtid_purgedитерируется с самого старого файла двоичного журнала и использует значениеPrevious_gtids_log_eventиз первого файла двоичного журнала, где оно находит либо непустое значениеPrevious_gtids_log_event, либо хотя бы одно событие журнала GTID (что указывает на то, что использование GTID начинается в этом месте). Если старые файлы двоичного журнала сервера не содержат событий журнала GTID, например, еслиgtid_mode=ONбыло установлено только недавно на сервере, этот процесс может занять много времени.
В версии MySQL 5.7.5 эта переменная была добавлена как
simplified_binlog_gtid_recovery, а в версии MySQL 5.7.6 она была переименована вbinlog_gtid_simple_recovery. -
Формат командной строки --enforce-gtid-consistency[=value]Переменная системы enforce_gtid_consistencyОбласть действия Глобальная Динамическая Да Тип Перечисление Значение по умолчанию OFFДопустимые значения OFFONWARNВ зависимости от значения этой переменной, сервер обеспечивает согласованность GTID, разрешая выполнение только тех операторов, которые могут быть безопасно записаны с помощью GTID. Вы обязаны установить эту переменную в
ONперед включением репликации на основе GTID.Значения, которые может принимать
enforce_gtid_consistency, следующие:OFF: все транзакции разрешены на нарушение согласованности GTID.ON: ни одна транзакция не разрешена на нарушение согласованности GTID.WARN: все транзакции разрешены на нарушение согласованности GTID, но в этом случае генерируется предупреждение.WARNдобавлено в MySQL 5.7.6.
Когда
enforce_gtid_consistencyустановлено вON, в журнал могут записываться только операторы, которые могут быть записаны с использованием безопасных для GTID операторов. Следовательно, эти операции нельзя использовать с этим параметром:операторы
CREATE TABLE ... SELECTоператоры
CREATE TEMPORARY TABLEилиDROP TEMPORARY TABLEвнутри транзакцийтранзакции или операторы, обновляющие как транзакционные, так и не транзакционные таблицы. Существует исключение: не транзакционные DML разрешены в той же транзакции или в том же операторе, что и транзакционные DML, если все не транзакционные таблицы являются временными.
--enforce-gtid-consistencyдействует только если выполняется двоичный лог для оператора. Если двоичный лог отключён на сервере или операторы не записываются в двоичный лог из-за фильтра, согласованность GTID не проверяется или не применяется к операторам, которые не записаны в лог.Для получения дополнительной информации см. раздел 16.1.3.6 «Ограничения репликации с GTID».
До версии MySQL 5.7.6 булевое значение
enforce_gtid_consistencyимело значение по умолчаниюOFF. Для обеспечения совместимости с предыдущими версиями в MySQL 5.7.6 перечисление по умолчанию установлено наOFF, и установка--enforce-gtid-consistencyбез значения интерпретируется как установка значенияON. Переменная также имеет несколько текстовых псевдонимов для значений:0=OFF=FALSE,1=ON=TRUE,2=WARN. Это отличается от других типов перечислений, но сохраняет совместимость с булевым типом, используемым в предыдущих версиях. Эти изменения влияют на возвращаемое значение переменной. ИспользуяSELECT @@ENFORCE_GTID_CONSISTENCY,SHOW VARIABLES LIKE 'ENFORCE_GTID_CONSISTENCY'иSELECT * FROM INFORMATION_SCHEMA.VARIABLES WHERE 'VARIABLE_NAME' = 'ENFORCE_GTID_CONSISTENCY', возвращается текстовая форма, а не числовая. Это несовместимое изменение, так как@@ENFORCE_GTID_CONSISTENCYвозвращает числовую форму для булевых значений, но возвращает текстовую форму дляSHOWи схемы информации.
-
Переменная системы gtid_executedОбласть действия Глобальная Динамическая Нет Тип Строка Единица измерения множество GTID При использовании с глобальной областью действия эта переменная содержит представление набора всех транзакций, выполненных на сервере, и GTID, которые были установлены с помощью оператора
SETgtid_purged. Это то же самое, что и значение столбцаExecuted_Gtid_Setв выводе оператораSHOW MASTER STATUSиSHOW SLAVE STATUS. Значение этой переменной является набором GTID, см. GTID Sets для получения дополнительной информации.При запуске сервера
@@GLOBAL.gtid_executedинициализируется. Подробнее см.binlog_gtid_simple_recovery, чтобы узнать, как двоичные журналы используются для заполненияgtid_executed. Затем GTID добавляются в набор при выполнении транзакций или при выполнении оператораSETgtid_purged.Множество транзакций, которые можно найти в двоичных журналах в любой момент времени, равно
GTID_SUBTRACT(@@GLOBAL.gtid_executed, @@GLOBAL.gtid_purged); то есть, всем транзакциям в двоичном журнале, которые еще не были удалены.Выполнение
RESET MASTERприводит к сбросу глобального значения (но не сессионного значения) этой переменной до пустой строки. GTID не удаляются из этого набора, за исключением случаев, когда набор очищается из-заRESET MASTER.До MySQL 5.7.7 эта переменная также могла использоваться с областью действия сессии, где она содержала представление множества транзакций, записываемых в кеш в текущей сессии. Область действия сессии была устаревшей в MySQL 5.7.7.
-
gtid_executed_compression_periodФормат командной строки --gtid-executed-compression-period=#Переменная системы gtid_executed_compression_periodОбласть действия Глобальная Динамическая Да Тип Целое число Значение по умолчанию 1000Минимальное значение 0Максимальное значение 4294967295Сжимайте таблицу
mysql.gtid_executedкаждый раз, когда обрабатывается заданное количество транзакций. Когда включено ведение двоичных журналов на сервере, этот метод сжатия не используется, и вместо этого таблицаmysql.gtid_executedсжимается при каждой ротации двоичного журнала. Если ведение двоичных журналов отключено на сервере, поток сжатия спит, пока не будет выполнено указанное количество транзакций, затем просыпается, чтобы выполнить сжатие таблицыmysql.gtid_executed. Установка значения этой переменной системы в 0 означает, что поток никогда не просыпается, поэтому этот явный метод сжатия не используется. Вместо этого сжатие происходит неявно по мере необходимости.См. mysql.gtid_executed Table Compression для получения дополнительной информации.
Эта переменная была добавлена в MySQL версии 5.7.5 как
executed_gtids_compression_periodи переименована в MySQL версии 5.7.6 вgtid_executed_compression_period. -
Формат командной строки --gtid-mode=MODEПеременная системы gtid_modeОбласть действия Глобальная Динамическая Да Тип Перечисление Значение по умолчанию OFFДопустимые значения OFFOFF_PERMISSIVEON_PERMISSIVEONУправляет включением ведения журнала на основе GTID и типом транзакций, которые могут содержать журналы. До MySQL 5.7.6 эта переменная была только для чтения и устанавливалась с помощью
--gtid-modeтолько при запуске сервера. До MySQL 5.7.5 запуск сервера с--gtid-mode=ONтребовал, чтобы сервер также запускался с параметрами--log-binи--log-slave-updates. С MySQL 5.7.5 это требование больше не является обязательным. См. mysql.gtid_executed Table.MySQL 5.7.6 позволяет динамически изменять эту переменную. Вам необходимо иметь достаточные привилегии для изменения глобальных переменных системы. См. Раздел 5.1.8.1, “Privileges for System Variables”.
enforce_gtid_consistencyдолжно быть установлено вON, прежде чем вы сможете изменитьgtid_mode=ON. Перед изменением этой переменной см. Раздел 16.1.4, “Изменение режимов репликации на онлайн-серверах”.Транзакции, записанные в MySQL 5.7.6 и выше, могут быть анонимными или использовать GTID. Анонимные транзакции полагаются на двоичный журнал и позицию для идентификации конкретных транзакций. Транзакции GTID имеют уникальный идентификатор, используемый для ссылки на транзакции. Режимы
OFF_PERMISSIVEиON_PERMISSIVE, добавленные в MySQL 5.7.6, позволяют использовать в топологии смесь этих типов транзакций. Теперь разные режимы:OFF: Новые и реплицированные транзакции должны быть анонимными.OFF_PERMISSIVE: Новые транзакции анонимны. Реплицированные транзакции могут быть либо анонимными, либо транзакциями GTID.ON_PERMISSIVE: Новые транзакции являются транзакциями GTID. Реплицированные транзакции могут быть либо анонимными, либо транзакциями GTID.ON: И новые, и реплицированные транзакции должны быть транзакциями GTID.
Изменения между значениями могут происходить только по одному шагу. Например, если
gtid_modeв настоящее время установлено вOFF_PERMISSIVE, можно переключиться наOFFилиON_PERMISSIVE, но не наON.В MySQL 5.7.6 и более поздних версиях значения
gtid_purgedиgtid_executedсохраняются независимо от значенияgtid_mode. Поэтому даже после изменения значенияgtid_modeэти переменные содержат правильные значения. В MySQL 5.7.5 и более ранних версиях значенияgtid_purgedиgtid_executedне сохраняются при измененииgtid_mode=OFF. Следовательно, после измененияgtid_modeнаOFF, после удаления всех двоичных журналов, содержащих GTID, значения этих переменных теряются.
-
Переменная системы gtid_nextОбласть Сеанс Динамическая Да Тип Перечисление Значение по умолчанию AUTOMATICДопустимые значения AUTOMATICANONYMOUS<UUID>:<NUMBER>Эта переменная используется для указания того, как получать следующий GTID.
Установка значения этой переменной в сеансе — ограниченная операция. Пользователь сеанса должен иметь достаточные привилегии для установки ограниченных переменных сеанса. См. Раздел 5.1.8.1, «Привилегии переменных системы».
gtid_nextможет принимать любое из следующих значений:AUTOMATIC: Использовать следующий автоматически сгенерированный глобальный идентификатор транзакции.ANONYMOUS: Транзакции не имеют глобальных идентификаторов и идентифицируются только по файлу и позиции.Глобальный идентификатор транзакции в формате
UUID:NUMBER.
Точное значение допустимых вариантов зависит от настройки
gtid_mode, см. Раздел 16.1.4.1, «Концепции режима репликации» для получения дополнительной информации. Установка этой переменной не оказывает никакого влияния, еслиgtid_modeимеет значениеOFF.После того, как эта переменная была установлена в значение
UUID:NUMBER, и транзакция была завершена или отменена, необходимо снова выполнить явную командуSET GTID_NEXTперед выполнением любой другой команды.В MySQL 5.7.5 и более поздних версиях
DROP TABLEилиDROP TEMPORARY TABLEзавершается с явным сообщением об ошибке при использовании в сочетании с невременными таблицами и временными таблицами, или временными таблицами, использующими транзакционные хранилища, с временными таблицами, использующими не транзакционные хранилища. В MySQL 5.7.5 и более ранних версиях, когда GTID были включены, ноgtid_nextне былAUTOMATIC,DROP TABLEне работал правильно, если использовался с одним из этих сочетаний таблиц. (Ошибка #17620053)В MySQL 5.7.1 вы не можете выполнить ни одну из команд
CHANGE MASTER TO,START SLAVE,STOP SLAVE,REPAIR TABLE,OPTIMIZE TABLE,ANALYZE TABLE,CHECK TABLE,CREATE SERVER,ALTER SERVER,DROP SERVER,CACHE INDEX,LOAD INDEX INTO CACHE,FLUSH, илиRESET, когдаgtid_nextустановлено на любое значение, кромеAUTOMATIC; в таких случаях команда завершается с ошибкой. Такие команды не запрещены в MySQL 5.7.2 и более поздних версиях. (Ошибка #16062608, Ошибка #16715809, Ошибка #69045) (Ошибка #16062608) -
Переменная системы gtid_ownedОбласть Глобальная, Сеанс Динамическая Нет Тип Строка Единица измерения множество GTID Эта только для чтения переменная, в основном, используется для внутренних целей. Ее содержимое зависит от области.
При использовании в глобальной области,
gtid_ownedсодержит список всех GTID, которые в настоящее время используются на сервере, с идентификаторами потоков, которые их владеют. Эта переменная в основном полезна для многопоточного репликации, чтобы проверить, обрабатывается ли транзакция в другом потоке. Поток приложения захватывает владение GTID транзакции на всё время обработки транзакции, поэтому@@global.gtid_ownedотображает GTID и владельца на всё время обработки. Когда транзакция завершена (или отменена), поток приложения освобождает владение GTID.При использовании в области сеанса,
gtid_ownedсодержит один GTID, который в настоящее время используется и принадлежит этому сеансу. Эта переменная в основном полезна для тестирования и отладки использования GTID, когда клиент явно назначил GTID для транзакции путем установкиgtid_next. В этом случае@@session.gtid_ownedотображает GTID на всё время обработки транзакции клиентом, до тех пор пока транзакция не будет завершена (или отменена). Когда клиент закончил обработку транзакции, переменная очищается. Если используетсяgtid_next=AUTOMATICдля сеанса,gtid_ownedзаполняется только ненадолго во время выполнения команды commit для транзакции, поэтому её нельзя наблюдать из заинтересованного сеанса, хотя она отображается, если@@global.gtid_ownedсчитывается в нужное время. Если у вас есть требование отслеживать GTID, которые обрабатываются клиентом в сеансе, можно включить отслеживание состояния сеанса, управляемое переменной системыsession_track_gtids.
-
Переменная системы gtid_purgedОбласть действия Глобальная Динамическая Да Тип Строка Единица измерения множество GTID Глобальное значение переменной системы
gtid_purged(@@GLOBAL.gtid_purged) — это множество GTID, включающее GTID всех транзакций, которые были завершены на сервере, но отсутствуют в каком-либо бинарном журнале на сервере.gtid_purgedявляется подмножествомgtid_executed. Следующие категории GTID находятся вgtid_purged:GTID реплицированных транзакций, которые были завершены с отключённым бинарным протоколированием на реплике.
GTID транзакций, которые были записаны в файл бинарного журнала, который был удалён.
GTID, которые были явно добавлены в множество оператором
SET @@GLOBAL.gtid_purged.
При запуске или перезапуске сервера глобальное значение
gtid_purgedинициализируется множеством GTID. Подробности о том, как вычисляется это множество GTID, см. вgtid_purged. Если на сервере присутствуют бинарные логи MySQL 5.7.7 или более ранних версий, вам может потребоваться установитьbinlog_gtid_simple_recovery=FALSEв файле конфигурации сервера для получения корректного вычисления. Подробности о ситуациях, когда это значение необходимо, см. в описанииbinlog_gtid_simple_recovery.Выполнение
RESET MASTERприводит к сбросу значенияgtid_purgedдо пустой строки.Вы можете установить значение
gtid_purged, чтобы отметить на сервере, что транзакции в определённом наборе GTID были применены, хотя они отсутствуют в любом бинарном журнале на сервере. Пример использования — восстановление резервной копии одной или нескольких баз данных на сервере, но при отсутствии соответствующих бинарных журналов, содержащих транзакции на сервере.ВажноGTID доступны на экземпляре сервера только в пределах количества неотрицательных значений для 64-битного целого числа со знаком (2 в степени 63 минус 1). Если вы установите значение
gtid_purgedвблизи этого предела, последующие операции COMMIT могут привести к исчерпанию GTID и выполнению действия, указанного вbinlog_error_action.В MySQL 5.7 можно обновить значение
gtid_purgedтолько тогда, когдаgtid_executedявляется пустой строкой, и поэтомуgtid_purgedтакже пуста. Это происходит либо при отсутствии предыдущего запуска репликации, либо при отсутствии предыдущего использования GTID в репликации. До MySQL 5.7.6gtid_purgedтакже можно было установить только когдаgtid_mode=ONбыло задано определённым образом. В MySQL 5.7.6 и более поздних версияхgtid_purgedможно задать независимо от значенияgtid_mode.Для замены значения
gtid_purgedвашим набором GTID используйте следующий оператор:SET @@GLOBAL.gtid_purged = 'gtid_set'
ПримечаниеЕсли вы используете MySQL 5.7.7 или более раннюю версию, после выполнения оператора
SET @@GLOBAL.gtid_purgedвам может потребоваться установитьbinlog_gtid_simple_recovery=FALSEв файле конфигурации сервера перед его перезапуском, иначеgtid_purgedможет быть вычислено некорректно. Подробности о ситуациях, когда это значение необходимо, см. в описанииbinlog_gtid_simple_recovery. Если все бинарные логи на сервере были созданы с использованием MySQL 5.7.8 или более поздней версии, и вы используете MySQL 5.7.8 или более позднюю версию,binlog_gtid_simple_recovery=TRUE(которое является значением по умолчанию с MySQL 5.7.7) можно безопасно использовать всегда.
© 2025 Oracle
Licensed under the GPLv2 License.