19.1.6.4 Параметры и переменные двоичного протоколирования
Вы можете использовать параметры mysqld и системные переменные, описанные в этом разделе, для управления работой двоичного журнала, а также для контроля над тем, какие операторы записываются в него. Дополнительную информацию о двоичном журнале см. в разделе 7.4.4 «Двоичный журнал». Дополнительную информацию об использовании параметров и системных переменных сервера MySQL см. в разделе 7.1.7 «Параметры командной строки сервера» и разделе 7.1.8 «Системные переменные сервера».
Параметры запуска, используемые с двоичным протоколированием
В следующем списке описаны параметры запуска для включения и настройки двоичного журнала. Системные переменные, используемые с двоичным протоколированием, обсуждаются позже в этом разделе.
-
Формат командной строки --binlog-row-event-max-size=#Системная переменная binlog_row_event_max_sizeОбласть действия Глобальная Динамическая Нет SET_VARПрименяется подсказкаНет Тип Целое число Значение по умолчанию 8192Минимальное значение 256Максимальное значение (64-битные платформы) 18446744073709551615Максимальное значение (32-битные платформы) 4294967295Единица измерения байты При использовании строкового двоичного протоколирования это значение является мягким ограничением максимального размера события двоичного журнала в строковом формате, в байтах. По возможности строки, хранящиеся в двоичном журнале, группируются в события с размером, не превышающим значения этого параметра. Если событие не может быть разделено, максимальный размер может быть превышен. Значение должно быть (или, в противном случае, округляется вниз до) кратным 256. Значение по умолчанию — 8192 байта.
-
Формат командной строки --log-bin=file_nameТип Имя файла Указывает базовое имя для файлов двоичного журнала. При включенном двоичном протоколировании сервер регистрирует все операторы, изменяющие данные, в двоичный журнал, который используется для резервного копирования и репликации. Двоичный журнал представляет собой последовательность файлов с базовым именем и числовым расширением. Значение параметра
--log-binявляется базовым именем для последовательности журнала. Сервер создает файлы двоичного журнала последовательно, добавляя числовой суффикс к базовому имени.Если вы не укажете параметр
--log-bin, MySQL используетbinlogв качестве значения по умолчанию для базового имени файлов двоичного журнала. Для совместимости со старыми версиями, если вы укажете параметр--log-binбез строки или с пустой строкой, базовое имя по умолчанию будет, используя имя хоста.host_name-binПо умолчанию файлы двоичного журнала находятся в каталоге данных. Вы можете использовать параметр
--log-bin, чтобы указать альтернативное расположение, добавив абсолютный путь к базовому имени, чтобы указать другой каталог. Когда сервер считывает запись из файла индекса двоичного журнала, который отслеживает используемые файлы двоичного журнала, он проверяет, содержит ли запись относительный путь. Если это так, относительная часть пути заменяется абсолютным путем, заданным с помощью параметра--log-bin. Абсолютный путь, записанный в файле индекса двоичного журнала, остается неизменным; в таком случае файл индекса должен быть изменён вручную, чтобы использовать новый или новые пути. Базовое имя файла двоичного журнала и указанный путь доступны как системная переменнаяlog_bin_basename.В MySQL 9.2 двоичное протоколирование включено по умолчанию, независимо от того, указали вы параметр
--log-binили нет. Исключением является случай, когда вы используете mysqld для инициализации каталога данных вручную, вызвав его с параметрами--initializeили--initialize-insecure, когда двоичное протоколирование отключено по умолчанию. В этом случае двоичное протоколирование можно включить, указав параметр--log-bin. Когда двоичное протоколирование включено, системная переменнаяlog_bin, отображающая состояние двоичного протоколирования на сервере, устанавливается в ON.Чтобы отключить двоичное протоколирование, вы можете указать параметр
--skip-log-binили--disable-log-binпри запуске. Если любой из этих параметров указан и--log-binтакже указан, приоритет имеет параметр, указанный позже. При отключенном двоичном протоколировании системная переменнаяlog_binустанавливается в OFF.При использовании GTID на сервере, если вы отключаете двоичное протоколирование при перезапуске сервера после нештатного завершения, некоторые GTID могут быть потеряны, что приведёт к сбою репликации. При нормальном завершении набор GTID из текущего файла двоичного журнала сохраняется в таблице
mysql.gtid_executed. После нештатного завершения, где этого не произошло, при восстановлении GTID добавляются в таблицу из файла двоичного журнала, при условии, что двоичное протоколирование всё ещё включено. Если двоичное протоколирование отключено для перезапуска сервера, сервер не может получить доступ к файлу двоичного журнала для восстановления GTID, поэтому репликация не может быть запущена. Двоичное протоколирование можно безопасно отключить после нормального завершения.Параметры
--log-replica-updatesи--replica-preserve-commit-orderтребуют включенного двоичного протоколирования. Если вы отключаете двоичное протоколирование, либо опустите эти параметры, либо укажите--log-replica-updates=OFFи--skip-replica-preserve-commit-order. MySQL отключает эти параметры по умолчанию, когда указан параметр--skip-log-binили--disable-log-bin. Если вы укажете--log-replica-updatesили--replica-preserve-commit-orderвместе с--skip-log-binили--disable-log-bin, будет выведено предупреждение или сообщение об ошибке.Сервер может быть запущен с идентификатором сервера по умолчанию, когда двоичное протоколирование включено, но будет выведено информационное сообщение, если вы не укажете идентификатор сервера явно, установив системную переменную
server_id. Для серверов, используемых в топологии репликации, необходимо указать уникальный ненулевой идентификатор сервера для каждого сервера.Дополнительную информацию о формате и управлении двоичным журналом см. в разделе 7.4.4 «Двоичный журнал».
-
Формат командной строки --log-bin-index=file_nameСистемная переменная log_bin_indexОбласть действия Глобальная Динамическая Нет SET_VARПрименяется подсказкаНет Тип Имя файла Имя файла индекса двоичного журнала, который содержит имена файлов двоичного журнала. По умолчанию он имеет такое же расположение и базовое имя, что и значение, указанное для файлов двоичного журнала с помощью параметра
--log-bin, плюс расширение.index. Если вы не указываете--log-bin, имя файла индекса двоичного журнала по умолчанию —binlog.index. Если вы указываете параметр--log-binбез строки или с пустой строкой, имя файла индекса двоичного журнала по умолчанию —, используя имя хоста.host_name-bin.indexДополнительную информацию о формате и управлении двоичным журналом см. в разделе 7.4.4 «Двоичный журнал».
Параметры выбора операторов. Параметры в следующем списке влияют на то, какие операторы записываются в двоичный журнал, и, следовательно, отправляются сервером репликации источнику своим репликам. Также существуют параметры для реплик, которые контролируют, какие операторы, полученные от источника, должны быть выполнены или проигнорированы. Подробности см. в разделе 19.1.6.3 «Параметры и переменные сервера реплики».
-
Формат командной строки --binlog-do-db=nameТип Строка Этот параметр влияет на двоичное протоколирование подобно тому, как
--replicate-do-dbвлияет на репликацию.Эффекты этого параметра зависят от используемого формата протоколирования (построчное или на основе инструкций), так же как и эффекты
--replicate-do-dbзависят от того, используется ли репликация на основе инструкций или на основе строк. Следует помнить, что формат протоколирования конкретной инструкции может не совпадать с форматом, указанным значениемbinlog_format. Например, инструкции DDL, такие какCREATE TABLEиALTER TABLE, всегда протоколируются как инструкции, независимо от используемого формата протоколирования, поэтому следующие правила для протоколирования инструкций на основе--binlog-do-dbвсегда применяются, определяя, будет ли инструкция протоколирована.Протоколирование на основе инструкций. В двоичный лог записываются только те инструкции, где базовая база данных (то есть, та, что выбрана с помощью
USE)db_name. Чтобы указать несколько баз данных, используйте этот параметр несколько раз, по одному для каждой базы данных; однако, это не приводит к протоколированию межбазовых инструкций, таких какUPDATE, при выборе другой базы данных (или отсутствии выбранной базы данных).some_db.some_tableSET foo='bar'ПредупреждениеЧтобы указать несколько баз данных, необходимо использовать несколько экземпляров этого параметра. Поскольку имена баз данных могут содержать запятые, список обрабатывается как имя одной базы данных, если вы предоставите список, разделённый запятыми.
Пример того, что не работает так, как ожидается, при использовании протоколирования на основе инструкций: если сервер запущен с
--binlog-do-db=salesи вы выполняете следующие инструкции, инструкцияUPDATEне протоколируется:USE prices; UPDATE sales.january SET amount=amount+1000;
Основная причина такого поведения “просто проверить базу данных по умолчанию” заключается в том, что по одной инструкции трудно определить, следует ли её реплицировать (например, если вы используете инструкции
DELETEилиUPDATEдля нескольких таблиц, которые охватывают несколько баз данных). Также быстрее проверить только базу данных по умолчанию, чем все базы данных, если это не требуется.Другой случай, который может быть не очевиден, возникает, когда конкретная база данных реплицируется, даже если она не была указана при настройке параметра. Если сервер запущен с
--binlog-do-db=sales, следующая инструкцияUPDATEпротоколируется, даже еслиpricesне был включён при настройке--binlog-do-db:USE sales; UPDATE prices.discounts SET percentage = percentage + 10;
Поскольку
salesявляется базой данных по умолчанию, когда выполняется инструкцияUPDATE, инструкцияUPDATEпротоколируется.Протоколирование на основе строк. Протоколирование ограничено базой данных
db_name. Протоколируются только изменения в таблицах, принадлежащихdb_name; базовая база данных на это не влияет. Предположим, что сервер запущен с--binlog-do-db=sales, и в действии находится протоколирование на основе строк, а затем выполняются следующие инструкции:USE prices; UPDATE sales.february SET amount=amount+100;
Изменения в таблице
februaryбазы данныхsalesпротоколируются в соответствии с инструкциейUPDATE; это происходит независимо от того, была ли выполнена инструкцияUSE. Однако, при использовании формата протоколирования на основе строк и--binlog-do-db=sales, изменения, внесённые следующей инструкциейUPDATE, не протоколируются:USE prices; UPDATE prices.march SET amount=amount-25;
Даже если инструкция
USE pricesбыла изменена наUSE sales, влияние инструкцииUPDATEпо-прежнему не будет записано в двоичный лог.Другое важное различие в обработке
--binlog-do-dbдля протоколирования на основе инструкций по сравнению с протоколированием на основе строк заключается в инструкциях, которые ссылаются на несколько баз данных. Предположим, что сервер запущен с--binlog-do-db=db1, и выполняются следующие инструкции:USE db1; UPDATE db1.table1, db2.table2 SET db1.table1.col1 = 10, db2.table2.col2 = 20;
Если вы используете протоколирование на основе инструкций, обновления обеих таблиц записываются в двоичный лог. Однако при использовании формата на основе строк протоколируются только изменения в
table1;table2находится в другой базе данных, поэтому она не изменяется инструкциейUPDATE. Теперь предположим, что вместо инструкцииUSE db1была использована инструкцияUSE db4:USE db4; UPDATE db1.table1, db2.table2 SET db1.table1.col1 = 10, db2.table2.col2 = 20;
В этом случае инструкция
UPDATEне записывается в двоичный лог при использовании протоколирования на основе инструкций. Однако при использовании протоколирования на основе строк изменение вtable1протоколируется, но не вtable2— другими словами, протоколируются только изменения в таблицах в базе данных, указанной в--binlog-do-db, и выбор базы данных по умолчанию на это поведение не влияет.
-
Формат командной строки --binlog-ignore-db=nameТип Строка Этот параметр влияет на двоичное протоколирование аналогичным образом, как
--replicate-ignore-dbвлияет на репликацию.Влияние этого параметра зависит от того, используется ли формат протоколирования на основе операторов или на основе строк, аналогично тому, как влияние
--replicate-ignore-dbзависит от того, используется ли репликация на основе операторов или на основе строк. Следует помнить, что формат, используемый для протоколирования данного оператора, может не совпадать с форматом, указанным значениемbinlog_format. Например, операторы DDL, такие какCREATE TABLEиALTER TABLE, всегда протоколируются как операторы, независимо от используемого формата протоколирования, поэтому следующие правила для протоколирования на основе операторов--binlog-ignore-dbвсегда применяются для определения того, будет ли оператор протоколироваться.Протоколирование на основе операторов. Указывает серверу не протоколировать ни один оператор, где базовая база данных (то есть та, которая выбрана оператором
USE) равнаdb_name.Когда нет базовой базы данных, не применяется никаких параметров
--binlog-ignore-db, и такие операторы всегда протоколируются. (Ошибка #11829838, ошибка #60188)Формат на основе строк. Указывает серверу не протоколировать обновления любых таблиц в базе данных
db_name. Текущая база данных не имеет значения.При использовании протоколирования на основе операторов следующий пример не работает так, как ожидается. Предположим, что сервер запущен с
--binlog-ignore-db=salesи вы выполняете следующие операторы:USE prices; UPDATE sales.january SET amount=amount+1000;
Оператор
UPDATEв таком случае протоколируется, потому что--binlog-ignore-dbприменяется только к базовой базе данных (определяемой операторомUSE). Поскольку база данныхsalesбыла явно указана в операторе, оператор не был отфильтрован. Однако при использовании протоколирования на основе строк результаты оператораUPDATEне записываются в двоичный протокол, что означает, что никакие изменения в таблицеsales.januaryне протоколируются; в этом случае--binlog-ignore-db=salesприводит к игнорированию всех изменений, внесенных в таблицы в копии базы данныхsalesисточника, для целей двоичного протоколирования.Для указания более одной базы данных для игнорирования используйте этот параметр несколько раз, по одному для каждой базы данных. Так как имена баз данных могут содержать запятые, список рассматривается как имя одной базы данных, если вы предоставите список через запятую.
Не следует использовать этот параметр, если вы используете межбазовые обновления и не хотите, чтобы эти обновления протоколировались.
Параметры контрольной суммы. MySQL поддерживает чтение и запись контрольных сумм двоичного протокола. Они включаются с помощью двух параметров, указанных здесь:
-
--binlog-checksum={NONE|CRC32}Формат командной строки --binlog-checksum=typeТип Строка Значение по умолчанию CRC32Допустимые значения NONECRC32Включение этого параметра заставляет источник записывать контрольные суммы событий, записанных в двоичный протокол. Установка в значение
NONEотключает, или имя алгоритма, используемого для генерации контрольных сумм; в настоящее время поддерживаются только контрольные суммы CRC32, и CRC32 является значением по умолчанию. Вы не можете изменить это значение внутри транзакции.
Для управления чтением контрольных сумм репликой (из журнала репликации) используйте параметр --replica-sql-verify-checksum.
Параметры тестирования и отладки. Следующие параметры двоичного протокола используются для тестирования и отладки репликации. Они не предназначены для использования в нормальной работе.
-
Формат командной строки --max-binlog-dump-events=#Тип Целое число Значение по умолчанию 0Этот параметр используется внутренне набором тестов MySQL для тестирования и отладки репликации.
-
Формат командной строки --sporadic-binlog-dump-fail[={OFF|ON}]Тип Булево Значение по умолчанию OFFЭтот параметр используется внутренне набором тестов MySQL для тестирования и отладки репликации.
Системные переменные, используемые с двоичным протоколированием
В следующем списке описаны системные переменные для управления двоичным протоколированием. Они могут быть установлены при запуске сервера, а некоторые из них могут быть изменены во время работы с помощью SET. Параметры сервера, используемые для управления двоичным протоколированием, перечислены ранее в этом разделе.
-
Формат командной строки --binlog-cache-size=#Системная переменная binlog_cache_sizeОбласть действия Глобальная Динамическая Да SET_VARПрименяется подсказкаНет Тип Целое число Значение по умолчанию 32768Минимальное значение 4096Максимальное значение (64-разрядные платформы) 18446744073709547520Максимальное значение (32-разрядные платформы) 4294963200Единица измерения байты Размер блока 4096Размер буфера памяти для хранения изменений в двоичном журнале во время транзакции.
Когда двоичное протоколирование включено на сервере (с системной переменной
log_binустановленной в ON), для каждого клиента выделяется кэш двоичного журнала, если сервер поддерживает какие-либо транзакционные хранилища данных. Если данные для транзакции превышают объем буфера памяти, избыточные данные сохраняются во временном файле. При активном шифровании двоичного журнала на сервере буфер памяти не шифруется, но любой временный файл, используемый для хранения кэша двоичного журнала, шифруется. После завершения каждой транзакции кэш двоичного журнала сбрасывается путём очистки буфера памяти и обнуления временного файла, если он использовался.Если часто используются большие транзакции, увеличение этого размера кэша может повысить производительность, уменьшив или устранив необходимость записи во временные файлы. Системные переменные состояния
Binlog_cache_useиBinlog_cache_disk_useмогут быть полезны для настройки размера этой переменной. См. Раздел 7.4.4, «Двоичный журнал».binlog_cache_sizeустанавливает размер кэша транзакции только; размер кэша операторов определяется системной переменнойbinlog_stmt_cache_size. -
Формат командной строки --binlog-checksum=typeСистемная переменная binlog_checksumОбласть действия Глобальная Динамическая Да SET_VARПрименяется подсказкаНет Тип Строка Значение по умолчанию CRC32Допустимые значения NONECRC32При включении эта переменная заставляет источник записывать контрольную сумму для каждого события в двоичном журнале.
binlog_checksumподдерживает значенияNONE(что отключает контрольные суммы) иCRC32. Значение по умолчанию –CRC32. Когдаbinlog_checksumотключена (значениеNONE), сервер проверяет, что он записывает только полные события в двоичный журнал, записывая и проверяя длину события (а не контрольную сумму) для каждого события.Установка этой переменной на источнике в значение, не распознаваемое репликой, заставляет реплику установить собственное значение
binlog_checksumвNONEи остановить репликацию с ошибкой. Если вы беспокоитесь о совместимости со старыми репликами, вы можете явно установить значение наNONE.Группа репликации в MySQL 9.2 поддерживает контрольные суммы, поэтому члены группы могут использовать значение по умолчанию.
Изменение значения
binlog_checksumприводит к переходу двоичного журнала, поскольку контрольные суммы должны быть записаны для всего файла двоичного журнала, а не только для части его. Вы не можете изменить значениеbinlog_checksumвнутри транзакции.Когда сжатие транзакций двоичного журнала включено с помощью системной переменной
binlog_transaction_compression, контрольные суммы не записываются для отдельных событий в сжатой полезной нагрузке транзакции. Вместо этого контрольная сумма записывается для события GTID и контрольная сумма для сжатойTransaction_payload_event. -
binlog_direct_non_transactional_updatesФормат командной строки --binlog-direct-non-transactional-updates[={OFF|ON}]Системная переменная binlog_direct_non_transactional_updatesОбласть действия Глобальная, сессия Динамическая Да SET_VARПрименяется подсказкаНет Тип Булево Значение по умолчанию OFFИз-за проблем с одновременным доступом реплика может стать несогласованной, когда транзакция содержит обновления как транзакционных, так и не транзакционных таблиц. MySQL пытается сохранить причинно-следственную связь между этими операциями, записывая не транзакционные операторы в кэш транзакций, который сбрасывается при подтверждении. Однако возникают проблемы, когда изменения, внесенные в не транзакционные таблицы от имени транзакции, становятся немедленно видимыми для других подключений, потому что эти изменения могут не быть немедленно записаны в двоичный журнал.
Переменная
binlog_direct_non_transactional_updatesпредлагает одно из возможных решений этой проблемы. По умолчанию эта переменная отключена. Включениеbinlog_direct_non_transactional_updatesвызывает запись обновлений в не транзакционные таблицы непосредственно в двоичный журнал, а не в кэш транзакций.Установка сессионного значения этой системной переменной — ограниченная операция. Пользователь сессии должен иметь права, достаточные для установки ограниченных сессионных переменных. См. Раздел 7.1.9.1, «Права на системные переменные».
binlog_direct_non_transactional_updatesработает только для операторов, которые реплицируются с помощью формата двоичного протоколирования на основе операторов; то есть, она работает только тогда, когда значениеbinlog_formatравноSTATEMENTили когдаbinlog_formatравноMIXED, и данный оператор реплицируется в формате на основе операторов. Эта переменная не влияет на работу, когда формат двоичного журнала равенROWили когдаbinlog_formatустановлено вMIXED, а данный оператор реплицируется с помощью формата на основе строк.ВажноПеред включением этой переменной необходимо убедиться, что нет зависимостей между транзакционными и не транзакционными таблицами; примером такой зависимости является оператор
INSERT INTO myisam_table SELECT * FROM innodb_table. В противном случае такие операторы, вероятно, приведут к расхождению реплики от источника.Эта переменная не оказывает никакого влияния, когда формат двоичного журнала равен
ROWилиMIXED.
-
Формат командной строки --binlog-encryption[={OFF|ON}]Переменная системы binlog_encryptionОбласть действия Глобальная Динамическая Да SET_VARПрименяется ли подсказкаНет Тип Булево Значение по умолчанию OFFВключает шифрование для файлов двоичного журнала и файлов журнала репликации на этом сервере. По умолчанию значение равно
OFF.ONвключает шифрование для файлов двоичного журнала и файлов журнала репликации. Для включения шифрования не нужно включать двоичный протокол логирования на сервере, поэтому вы можете зашифровать файлы журнала репликации на реплике, у которой нет двоичного журнала. Для использования шифрования необходимо установить и настроить плагин keyring для предоставления MySQL Server’s keyring service. Инструкции по этому поводу см. в разделе 8.4.4, «MySQL Keyring». Любой поддерживаемый плагин keyring может использоваться для хранения ключей шифрования двоичного журнала.При первом запуске сервера с включённым шифрованием двоичного журнала, перед инициализацией двоичного журнала и журнала репликации генерируется новый ключ шифрования двоичного журнала. Этот ключ используется для шифрования пароля файла для каждого файла двоичного журнала (если на сервере включено двоичное протоколирование) и файла журнала репликации (если на сервере включены каналы репликации), а дополнительные ключи, сгенерированные из паролей файлов, используются для шифрования данных в файлах. Файлы журнала репликации шифруются для всех каналов, включая каналы применения Group Replication и новые каналы, созданные после активации шифрования. Файлы индексов двоичного журнала и журнала репликации никогда не шифруются.
Если вы активируете шифрование, когда сервер работает, в этот момент генерируется новый ключ шифрования двоичного журнала. Исключением является случай, когда шифрование было ранее активным на сервере, а затем было отключено, в этом случае снова используется ключ шифрования двоичного журнала, который использовался ранее. Файл двоичного журнала и файлы журнала репликации сразу же будут переротаны, и пароли файлов для новых файлов и всех последующих файлов двоичного журнала и файлов журнала репликации будут зашифрованы с использованием этого ключа шифрования двоичного журнала. Существующие файлы двоичного журнала и файлы журнала репликации, которые всё ещё присутствуют на сервере, не шифруются автоматически, но вы можете их удалить, если они больше не нужны.
Если вы деактивируете шифрование, изменив системную переменную
binlog_encryptionнаOFF, файл двоичного журнала и файлы журнала репликации будут сразу же переротаны, и всё последующее протоколирование будет без шифрования. Ранее зашифрованные файлы не будут автоматически расшифрованы, но сервер по-прежнему сможет их прочитать. Для активации или деактивации шифрования во время работы сервера требуется привилегияBINLOG_ENCRYPTION_ADMIN(или устаревшая привилегияSUPER). Каналы приложения Group Replication не включены в запрос переротации журнала репликации, поэтому протоколирование без шифрования для этих каналов не начнется, пока их журналы не будут переротированы в ходе нормальной работы.Дополнительную информацию о шифровании файлов двоичного журнала и файлов журнала репликации см. в разделе 19.3.2, «Шифрование файлов двоичного журнала и файлов журнала репликации».
-
Формат командной строки --binlog-error-action[=value]Переменная системы binlog_error_actionОбласть действия Глобальная Динамическая Да SET_VARПрименяется ли подсказкаНет Тип Перечисление Значение по умолчанию ABORT_SERVERДопустимые значения IGNORE_ERRORABORT_SERVERУправляет тем, что происходит, когда сервер сталкивается с ошибкой, такой как невозможность записи в, сброса или синхронизации двоичного журнала, что может привести к несогласованности двоичного журнала источника и потере синхронизации репликами.
По умолчанию эта переменная установлена в
ABORT_SERVER, что заставляет сервер остановить протоколирование и завершить работу при обнаружении такой ошибки с двоичным журналом. При перезапуске восстановление происходит так же, как и при неожиданном остановке сервера (см. раздел 19.4.2, «Обработка неожиданной остановки реплики»).Когда
binlog_error_actionустановлено вIGNORE_ERROR, если сервер обнаруживает такую ошибку, он продолжает текущую транзакцию, записывает ошибку, затем останавливает протоколирование и продолжает выполнение обновлений. Для возобновления двоичного протоколирования необходимо снова включитьlog_bin, что требует перезапуска сервера. Эта настройка обеспечивает обратную совместимость со старыми версиями MySQL. -
Формат командной строки --binlog-expire-logs-seconds=#Переменная системы binlog_expire_logs_secondsОбласть действия Глобальная Динамическая Да SET_VARПрименяется ли подсказкаНет Тип Целое число Значение по умолчанию 2592000Минимальное значение 0Максимальное значение 4294967295Единица измерения секунды Устанавливает период истечения срока действия двоичного журнала в секундах. По истечении срока действия файлы двоичного журнала могут быть автоматически удалены. Возможные удаления происходят при запуске и при сбросе двоичного журнала. Сброс журнала происходит, как указано в разделе 7.4, «Журналы MySQL Server».
По умолчанию период истечения срока действия двоичного журнала составляет 2592000 секунд, что равно 30 дням (30*24*60*60 секунд).
Автоматическое удаление двоичного журнала можно отключить, установив системную переменную
binlog_expire_logs_auto_purgeв значениеOFF. Это имеет приоритет над любым значением дляbinlog_expire_logs_seconds.Для удаления файлов двоичного журнала вручную используйте оператор
PURGE BINARY LOGS. См. раздел 15.4.1.1, «Оператор PURGE BINARY LOGS». -
Формат командной строки --binlog-expire-logs-auto-purge={ON|OFF}Переменная системы binlog_expire_logs_auto_purgeОбласть действия Глобальная Динамическая Да SET_VARПрименяется ли подсказкаНет Тип Булево Значение по умолчанию ONВключает или отключает автоматическое удаление файлов двоичного журнала. Установка этой переменной в значение
ON(по умолчанию) включает автоматическое удаление; установка в значениеOFFотключает автоматическое удаление. Интервал ожидания перед удалением управляется переменнойbinlog_expire_logs_seconds.ПримечаниеДаже если
binlog_expire_logs_auto_purgeравноON, установкаbinlog_expire_logs_secondsв значение0останавливает автоматическое удаление.Эта переменная не влияет на
PURGE BINARY LOGS.
-
Формат командной строки --binlog-format=formatУстарело Да Системная переменная binlog_formatОбласть Глобальная, сессия Динамическая Да SET_VARПрименяется подсказкаНет Тип Перечисление Значение по умолчанию ROWДопустимые значения MIXEDSTATEMENTROWЭта системная переменная задаёт формат двоичного протоколирования и может принимать одно из значений
STATEMENT,ROWилиMIXED. (См. Раздел 19.2.1, «Форматы репликации».) Настройка вступает в силу при включении двоичного протоколирования на сервере, что происходит, когда системная переменнаяlog_binимеет значениеON. В MySQL 9.2 двоичное протоколирование включено по умолчанию и использует формат на основе строк.Примечаниеbinlog_formatустарела и может быть удалена в будущей версии MySQL. Это подразумевает, что поддержка форматов протоколирования, отличных от на основе строк, также может быть удалена в будущих выпусках. Поэтому для новых установок репликации MySQL следует использовать только протоколирование на основе строк.binlog_formatможет быть установлена при запуске или в процессе работы, за исключением некоторых случаев, когда изменение этой переменной во время работы невозможно или приводит к сбою репликации, как описано ниже.Значение по умолчанию —
ROW. Исключение: в NDB Cluster значение по умолчанию —MIXED; репликация на основе утверждений не поддерживается для NDB Cluster.Установка значения сессии для этой системной переменной — ограниченная операция. Пользователь сессии должен иметь достаточные привилегии для установки ограниченных переменных сессии. См. Раздел 7.1.9.1, «Привилегии системных переменных».
Правила, определяющие, когда изменения в этой переменной вступят в силу и как долго они будут действовать, такие же, как и для других системных переменных сервера MySQL. Для получения дополнительной информации см. Раздел 15.7.6.1, «Синтаксис SET для присваивания переменных».
При указании
MIXEDиспользуется репликация на основе утверждений, за исключением случаев, когда гарантируется корректность только репликации на основе строк. Например, это происходит, когда утверждения содержат загружаемые функции или функциюUUID().Подробное описание обработки хранимых программ (хранимых процедур и функций, триггеров и событий) при каждом формате двоичного протоколирования см. в Разделе 27.8, «Двоичное протоколирование хранимых программ».
Существуют исключения, когда вы не можете переключить формат репликации во время выполнения:
Формат репликации нельзя изменить внутри хранимой функции или триггера.
Если в сессии открыты временные таблицы, формат репликации для сессии изменить нельзя (
SET @@SESSION.binlog_format).Если в любом канале репликации открыты временные таблицы, формат репликации нельзя изменить глобально (
SET @@GLOBAL.binlog_formatилиSET @@PERSIST.binlog_format).Если любой поток-применитель канала репликации в данный момент выполняется, формат репликации нельзя изменить глобально (
SET @@GLOBAL.binlog_formatилиSET @@PERSIST.binlog_format).
Попытка переключения формата репликации в любом из этих случаев (или попытка установить текущий формат репликации) приведёт к ошибке. Однако можно использовать
PERSIST_ONLY(SET @@PERSIST_ONLY.binlog_format), чтобы изменить формат репликации в любое время, так как это действие не изменяет текущее значение глобальной системной переменной и вступает в силу только после перезапуска сервера.Переключение формата репликации во время работы не рекомендуется, когда существуют временные таблицы, так как временные таблицы регистрируются только при репликации на основе утверждений, а при репликации на основе строк и смешанной репликации они не регистрируются.
Изменение формата протоколирования на сервере-источнике не приводит к изменению формата протоколирования у реплики. Переключение формата репликации во время работы репликации может вызвать проблемы, если у реплики включено двоичное протоколирование, и изменение приводит к тому, что у реплики используется
STATEMENTформат протоколирования, в то время как у источника используетсяROWилиMIXEDформат протоколирования. Реплика не может преобразовать записи двоичного журнала, полученные в формате протоколированияROW, в форматSTATEMENTдля использования в своём собственном двоичном журнале, поэтому такая ситуация может привести к сбою репликации. Для получения дополнительной информации см. Раздел 7.4.4.2, «Установка формата двоичного журнала».Формат двоичного журнала влияет на поведение следующих параметров сервера:
Эти эффекты подробно обсуждаются в описаниях отдельных параметров.
-
binlog_group_commit_sync_delayФормат командной строки --binlog-group-commit-sync-delay=#Системная переменная binlog_group_commit_sync_delayОбласть Глобальная Динамическая Да SET_VARПрименяется подсказкаНет Тип Целое число Значение по умолчанию 0Минимальное значение 0Максимальное значение 1000000Единица измерения микросекунды Управляет тем, сколько микросекунд двоичный журнал ожидает синхронизации файла двоичного журнала с диском. По умолчанию
binlog_group_commit_sync_delayимеет значение 0, что означает отсутствие задержки. Установкаbinlog_group_commit_sync_delayс задержкой в микросекунды позволяет синхронизировать больше транзакций вместе на диске сразу, что сокращает общее время фиксации группы транзакций, так как большие группы требуют меньше единиц времени на группу.При установке
sync_binlog=0илиsync_binlog=1заданнаяbinlog_group_commit_sync_delayзадержка применяется для каждой группы фиксации двоичного журнала перед синхронизацией (или, в случаеsync_binlog=0, перед продолжением). Когдаsync_binlogимеет значение n больше 1, задержка применяется после каждой n-ой группы фиксации двоичного журнала.Установка
binlog_group_commit_sync_delayможет увеличить количество параллельных транзакций, фиксируемых на любом сервере, который имеет (или может иметь после отключения) реплику, и, следовательно, может увеличить параллельное выполнение на репликах. При настройкеbinlog_group_commit_sync_delayважно учитывать пропускную способность как источника, так и реплики.Установка
binlog_group_commit_sync_delayтакже может уменьшить количествоfsync()вызовов двоичного журнала на любом сервере (источнике или реплике), который имеет двоичный журнал.Обратите внимание, что установка
binlog_group_commit_sync_delayувеличивает задержку транзакций на сервере, что может повлиять на клиентские приложения. Также при высокой нагрузке возможны увеличение конкуренции и, следовательно, снижение пропускной способности. Обычно преимущества установки задержки перевешивают недостатки, но настройка всегда должна производиться для определения оптимального значения.
-
binlog_group_commit_sync_no_delay_countФормат командной строки --binlog-group-commit-sync-no-delay-count=#Системная переменная binlog_group_commit_sync_no_delay_countОбласть действия Глобальная Динамическая Да Применяется подсказка SET_VARНет Тип Целое число Значение по умолчанию 0Минимальное значение 0Максимальное значение 100000Максимальное количество транзакций, которые нужно дождаться, прежде чем прервать текущую задержку, как указано в
binlog_group_commit_sync_delay. Еслиbinlog_group_commit_sync_delayустановлено в 0, то этот параметр не имеет эффекта. -
Формат командной строки --binlog-max-flush-queue-time=#Устарело Да Системная переменная binlog_max_flush_queue_timeОбласть действия Глобальная Динамическая Да Применяется подсказка SET_VARНет Тип Целое число Значение по умолчанию 0Минимальное значение 0Максимальное значение 100000Единицы измерения микросекунды binlog_max_flush_queue_timeустарело и будет удалено в будущих версиях MySQL. Ранее эта системная переменная контролировала время в микросекундах для продолжения чтения транзакций из очереди сброса перед продолжением группового подтверждения. Сейчас она не оказывает никакого влияния. -
Формат командной строки --binlog-order-commits[={OFF|ON}]Системная переменная binlog_order_commitsОбласть действия Глобальная Динамическая Да Применяется подсказка SET_VARНет Тип Булево Значение по умолчанию ONКогда эта переменная включена на сервере источника репликации (что является значением по умолчанию), инструкции подтверждения транзакций, отправленные движкам хранения, сериализуются на одном потоке, так что транзакции всегда подтверждаются в том же порядке, в котором они записываются в двоичный журнал. Отключение этой переменной позволяет выдавать инструкции подтверждения транзакций с использованием нескольких потоков. В сочетании с групповым подтверждением двоичного журнала это предотвращает то, что скорость подтверждения одной транзакции становится узким местом для производительности и, следовательно, может улучшить её.
Транзакции записываются в двоичный журнал в тот момент, когда все участвующие движки хранения подтверждают, что транзакция готова к подтверждению. Затем логика группового подтверждения двоичного журнала подтверждает группу транзакций после того, как произошла запись в двоичный журнал. Когда
binlog_order_commitsотключена, из-за использования нескольких потоков транзакции в группе подтверждения могут быть подтверждены в другом порядке, чем их порядок в двоичном журнале. (Транзакции от одного клиента всегда подтверждаются в хронологическом порядке). Во многих случаях это не имеет значения, так как операции, выполняемые в отдельных транзакциях, должны давать согласованные результаты, и если это не так, следует использовать одну транзакцию вместо нескольких.Если вы хотите гарантировать, что история транзакций на источнике и на многопоточном реплике останется идентичной, установите
replica_preserve_commit_order=1на реплике. -
binlog_rotate_encryption_master_key_at_startupФормат командной строки --binlog-rotate-encryption-master-key-at-startup[={OFF|ON}]Системная переменная binlog_rotate_encryption_master_key_at_startupОбласть действия Глобальная Динамическая Нет Применяется подсказка SET_VARНет Тип Булево Значение по умолчанию OFFУказывает, вращается ли главный ключ шифрования двоичного журнала при запуске сервера. Главный ключ шифрования двоичного журнала — это ключ шифрования двоичного журнала, используемый для шифрования паролей файлов двоичного журнала и файлов репликации на сервере. При первом запуске сервера с включенным шифрованием двоичного журнала (
binlog_encryption=ON) генерируется новый ключ шифрования двоичного журнала и используется в качестве главного ключа шифрования двоичного журнала. Если системная переменнаяbinlog_rotate_encryption_master_key_at_startupтакже установлена вON, при каждом перезапуске сервера генерируется дополнительный ключ шифрования двоичного журнала и используется в качестве главного ключа шифрования двоичного журнала для всех последующих файлов двоичного журнала и файлов репликации. Если системная переменнаяbinlog_rotate_encryption_master_key_at_startupустановлена вOFF, что является значением по умолчанию, существующий главный ключ шифрования двоичного журнала используется повторно после перезапуска сервера. Для получения дополнительной информации о ключах шифрования двоичного журнала и главном ключе шифрования двоичного журнала см. Раздел 19.3.2, «Шифрование файлов двоичного журнала и файлов репликации». -
Формат командной строки --binlog-row-event-max-size=#Системная переменная binlog_row_event_max_sizeОбласть действия Глобальная Динамическая Нет Применяется подсказка SET_VARНет Тип Целое число Значение по умолчанию 8192Минимальное значение 256Максимальное значение (64-битные платформы) 18446744073709551615Максимальное значение (32-битные платформы) 4294967295Единицы измерения байты При использовании построчного логгирования двоичных данных данная настройка является мягким ограничением максимального размера события двоичного журнала на основе строк в байтах. По возможности строки, хранящиеся в двоичном журнале, группируются в события размером, не превышающим значения этой настройки. Если событие не может быть разделено, максимальный размер может быть превышен. Значение по умолчанию — 8192 байта.
Эта глобальная системная переменная является только для чтения и может быть установлена только при запуске сервера. Поэтому ее значение можно изменить только с помощью ключевого слова
PERSIST_ONLYили квалификатора@@persist_onlyс операторомSET.
-
Формат командной строки --binlog-row-image=image_typeСистемная переменная binlog_row_imageОбласть действия Глобальная, Сеансовая Динамическая Да SET_VARПрименяется подсказкаНет Тип Перечисление Значение по умолчанию fullДопустимые значения full(Логировать все столбцы)minimal(Логировать только изменённые столбцы и столбцы, необходимые для идентификации строк)noblob(Логировать все столбцы, за исключением ненужных BLOB и TEXT столбцов)Для репликации MySQL на основе строк эта переменная определяет, как изображения строк записываются в двоичный журнал.
Установка сеансового значения этой системной переменной является ограниченной операцией. Пользователь сеанса должен иметь права, достаточные для установки ограниченных сеансовых переменных. См. Раздел 7.1.9.1, «Права на системные переменные».
В репликации MySQL на основе строк каждый событие изменения строки содержит два изображения: изображение «“до”», столбцы которого сравниваются при поиске строки для обновления, и изображение «“после”», содержащее изменения. Обычно MySQL логирует полные строки (то есть все столбцы) для изображений «до» и «после». Однако не обязательно включать каждый столбец в оба изображения, и часто можно сэкономить диск, память и использование сети, регистрируя только те столбцы, которые фактически необходимы.
ПримечаниеПри удалении строки логируется только изображение «до», так как нет изменённых значений для распространения после удаления. При вставке строки логируется только изображение «после», так как нет существующей строки для сопоставления. Только при обновлении строки необходимы и записываются в двоичный журнал оба изображения: «до» и «после».
Для изображения «до» необходимо, чтобы был залогирован минимальный набор столбцов, необходимых для уникальной идентификации строк. Если таблица, содержащая строку, имеет первичный ключ, то в двоичный журнал записывается только столбец или столбцы первичного ключа. В противном случае, если таблица имеет уникальный ключ, все столбцы которого
NOT NULL, то нужно логировать только столбцы в уникальном ключе. (Если у таблицы нет ни первичного ключа, ни уникального ключа без каких-либоNULLстолбцов, то все столбцы должны использоваться в изображении «до» и быть залогированы.) В изображении «после» необходимо логировать только те столбцы, которые фактически изменились.Вы можете заставить сервер логировать полные или минимальные строки, используя системную переменную
binlog_row_image. Эта переменная фактически принимает одно из трёх возможных значений, как показано в следующем списке:full: Логировать все столбцы в обоих изображениях (до и после).minimal: Логировать только те столбцы в изображении «до», которые необходимы для идентификации строки, подлежащей изменению; логировать только те столбцы в изображении «после», где значение было указано в SQL-запросе или сгенерировано автоинкрементом.noblob: Логировать все столбцы (то же, что иfull), за исключением столбцовBLOBиTEXT, которые не требуются для идентификации строк или не были изменены.
ПримечаниеЭта переменная не поддерживается NDB Cluster; её установка не оказывает никакого влияния на протоколирование таблиц
NDB.Значение по умолчанию —
full.При использовании
minimalилиnoblob, удаления и обновления гарантированно будут работать правильно для данной таблицы, только если следующие условия выполняются для обеих таблиц: источника и назначения:Все столбцы должны быть присутствовать и в том же порядке; каждый столбец должен использовать тот же тип данных, что и его аналог в другой таблице.
Таблицы должны иметь идентичные определения первичных ключей.
(Другими словами, таблицы должны быть идентичными с возможным исключением индексов, которые не являются частью первичных ключей таблиц.)
Если эти условия не соблюдены, возможно, что значения столбца первичного ключа в таблице назначения окажутся недостаточными для предоставления уникального соответствия для удаления или обновления. В этом случае не выдаётся предупреждение или ошибка; источник и реплика молча расходятся, тем самым нарушая согласованность.
Установка этой переменной не оказывает никакого влияния, когда формат двоичного протоколирования —
STATEMENT. Когдаbinlog_formatравенMIXED, настройка дляbinlog_row_imageприменяется к изменениям, которые регистрируются с помощью формата на основе строк, но эта настройка не влияет на изменения, зарегистрированные как инструкции.Установка
binlog_row_imageна глобальном или сеансовом уровне не вызывает неявного подтверждения; это означает, что эта переменная может быть изменена во время выполнения транзакции без влияния на транзакцию. -
Формат командной строки --binlog-row-metadata=metadata_typeСистемная переменная binlog_row_metadataОбласть действия Глобальная Динамическая Да SET_VARПрименяется подсказкаНет Тип Перечисление Значение по умолчанию MINIMALДопустимые значения FULL(Включается вся метаданные)MINIMAL(Ограничить включаемые метаданные)Настраивает объём метаданных таблицы, добавляемых в двоичный журнал при использовании протоколирования на основе строк. При установке в
MINIMAL, по умолчанию, логируются только метаданные, относящиеся кSIGNEDфлагам, набору символов столбцов и типам геометрий. При установке вFULLпротоколируется полная информация о метаданных таблиц, например имя столбца,ENUMилиSETстроковые значения, информацияPRIMARY KEYи т. д.Расширенные метаданные служат следующим целям:
Реплики используют метаданные для передачи данных, когда структура таблицы отличается от структуры источника.
Внешнее программное обеспечение может использовать метаданные для декодирования событий строк и сохранения данных во внешних базах данных, например, в хранилище данных.
-
Формат командной строки --binlog-row-value-options=#Переменная системы binlog_row_value_optionsОбласть действия Глобальная, Сеанс Динамическая Да SET_VARПрименяется ли подсказкаНет Тип Набор Значение по умолчанию Допустимые значения PARTIAL_JSONПри установке в значение
PARTIAL_JSON, это включает использование эффективного по объему формата двоичного журнала для обновлений, которые изменяют только небольшую часть JSON-документа, что заставляет строчную репликацию записывать в послеобразе обновления в двоичном журнале только измененные части JSON-документа, а не весь документ (см. Частичные обновления значений JSON). Это работает для оператораUPDATE, который изменяет столбец JSON с помощью любой последовательностиJSON_SET(),JSON_REPLACE()иJSON_REMOVE(). Если сервер не может сгенерировать частичное обновление, используется весь документ.Значение по умолчанию — пустая строка, что отключает использование формата. Чтобы сбросить
binlog_row_value_optionsи вернуться к записи всего JSON-документа, установите его значение в пустую строку.Установка значения сеанса этой переменной системы — ограниченная операция. Пользователь сеанса должен иметь достаточные привилегии для установки ограниченных переменных сеанса. См. Раздел 7.1.9.1, «Привилегии на переменные системы».
binlog_row_value_options=PARTIAL_JSONвступает в силу только при включенном ведении двоичного журнала иbinlog_formatустановлено в значениеROWилиMIXED. Репликация на основе операторов всегда записывает только измененные части JSON-документа, независимо от любого значения, установленного дляbinlog_row_value_options. Для максимального сокращения занимаемого пространства используйтеbinlog_row_image=NOBLOBилиbinlog_row_image=MINIMALвместе с этим параметром.binlog_row_image=FULLзанимает меньше места, чем любой из этих, поскольку полный JSON-документ хранится в предобразе, а частичное обновление — только в послеобразе.Вывод mysqlbinlog включает частичные обновления JSON в виде событий, закодированных как строки base-64 с использованием операторов
BINLOG. Если указан параметр--verbose, mysqlbinlog отображает частичные обновления JSON как читаемый JSON с использованием псевдо-SQL операторов.MySQL Replication генерирует ошибку, если изменение не может быть применено к JSON-документу на реплике. Это включает в себя и неудачу в поиске пути. Следует помнить, что даже при этих и других проверках безопасности, если JSON-документ на реплике отличается от источника и применяется частичное обновление, теоретически возможно получить на реплике допустимый, но неожиданный JSON-документ.
-
binlog_rows_query_log_eventsФормат командной строки --binlog-rows-query-log-events[={OFF|ON}]Переменная системы binlog_rows_query_log_eventsОбласть действия Глобальная, Сеанс Динамическая Да SET_VARПрименяется ли подсказкаНет Тип Булево Значение по умолчанию OFFЭта переменная системы влияет только на строчную запись в журнал. При включении она заставляет сервер записывать в двоичный журнал события информационного журнала, такие как события журнала запросов строк. Эта информация может использоваться для отладки и связанных целей, например, для получения исходного запроса, выданного в источнике, когда его нельзя восстановить по обновлениям строк.
Установка значения сеанса этой переменной системы — ограниченная операция. Пользователь сеанса должен иметь достаточные привилегии для установки ограниченных переменных сеанса. См. Раздел 7.1.9.1, «Привилегии на переменные системы».
Эти информационные события обычно игнорируются программами MySQL, считывающими двоичный журнал, и поэтому не создают проблем при репликации или восстановлении из резервной копии. Для просмотра увеличьте уровень подробности, используя параметр mysqlbinlog's
--verboseдважды, либо как-vv, либо как--verbose --verbose. -
Формат командной строки --binlog-stmt-cache-size=#Переменная системы binlog_stmt_cache_sizeОбласть действия Глобальная Динамическая Да SET_VARПрименяется ли подсказкаНет Тип Целое Значение по умолчанию 32768Минимальное значение 4096Максимальное значение (64-разрядные платформы) 18446744073709547520Максимальное значение (32-разрядные платформы) 4294963200Единица измерения байты Размер блока 4096Размер буфера памяти для двоичного журнала, чтобы хранить нетранзакционные операторы, выданные во время транзакции.
Когда ведение двоичного журнала включено на сервере (с переменной системы
log_binустановленной в ВКЛ), отдельные транзакционные и операторные кэши двоичного журнала выделяются для каждого клиента, если сервер поддерживает любые транзакционные хранилища данных. Если данные для нетранзакционных операторов, используемых в транзакции, превышают пространство в буфере памяти, избыточные данные хранятся во временном файле. Когда на сервере включено шифрование двоичного журнала, буфер памяти не шифруется, но любой временный файл, используемый для хранения кэша двоичного журнала, шифруется. После завершения каждой транзакции кэш операторов двоичного журнала сбрасывается, очищая буфер памяти и обрезая временный файл, если он используется.Если вы часто используете большие нетранзакционные операторы во время транзакций, вы можете увеличить размер этого кэша, чтобы повысить производительность, уменьшив или устранив необходимость записи во временные файлы. Переменные состояния
Binlog_stmt_cache_useиBinlog_stmt_cache_disk_useмогут быть полезны для настройки размера этой переменной. См. Раздел 7.4.4, «Двоичный журнал».Переменная системы
binlog_cache_sizeустанавливает размер кэша транзакций.
-
binlog_transaction_compressionФормат командной строки --binlog-transaction-compression[={OFF|ON}]Системная переменная binlog_transaction_compressionОбласть действия Глобальная, Сеанс Динамическая Да SET_VARПрименяется ли подсказкаНет Тип Булево Значение по умолчанию OFFВключает сжатие для транзакций, которые записываются в файлы бинарного журнала на этом сервере.
OFFявляется значением по умолчанию. Используйте системную переменнуюbinlog_transaction_compression_level_zstd, чтобы установить уровень для алгоритмаzstd, который используется для сжатия.Установка
binlog_transaction_compressionне оказывает немедленного влияния, а применяется ко всем последующим операциямSTART REPLICA.Когда включено сжатие бинарных журналов транзакций, данные транзакции сжимаются, а затем записываются в файл бинарного журнала как одно событие (
Transaction_payload_event). Сжатые данные транзакций остаются в сжатом состоянии, пока они отправляются в поток репликации репликам, другим членам группы Group Replication или клиентам, таким как mysqlbinlog, и записываются в релейный журнал по-прежнему в сжатом виде. Сжатие бинарных журналов транзакций, таким образом, экономит место на диске как у источника транзакции, так и у получателя (а также для их резервных копий), а также экономит полосу пропускания сети при отправке транзакций между серверными экземплярами.Для того, чтобы
binlog_transaction_compression=ONимело непосредственное воздействие, необходимо включить ведение бинарного журнала на сервере. Если на экземпляре MySQL 9.2 сервера нет бинарного журнала, он может принимать, обрабатывать и отображать сжатые данные транзакций независимо от значенияbinlog_transaction_compression. Сжатые данные транзакций, полученные такими серверными экземплярами, записываются в сжатом виде в релейный журнал, так что они косвенно получают выгоду от сжатия, выполненного другими серверами в топологии репликации.Это системная переменная не может быть изменена в рамках транзакции. Установка значения сеанса этой системной переменной — ограниченная операция. Пользователь сеанса должен иметь достаточные привилегии для установки ограниченных переменных сеанса. См. Раздел 7.1.9.1, «Привилегии на системные переменные».
Дополнительную информацию о сжатии бинарных журналов транзакций, включая подробности о том, какие события сжимаются, а какие нет, и изменения в поведении при использовании сжатия транзакций, см. в Разделе 7.4.4.5, «Сжатие бинарных журналов транзакций».
Вы можете использовать системную переменную
ndb_log_transaction_compression, чтобы включить эту функцию дляNDB. Кроме того, установка--binlog-transaction-compression=ONв командной строке или в файлеmy.cnfприводит к включениюndb_log_transaction_compressionпри запуске сервера. Дополнительную информацию см. в описании переменной. -
binlog_transaction_compression_level_zstdФормат командной строки --binlog-transaction-compression-level-zstd=#Системная переменная binlog_transaction_compression_level_zstdОбласть действия Глобальная, Сеанс Динамическая Да SET_VARПрименяется ли подсказкаНет Тип Целое число Значение по умолчанию 3Минимальное значение 1Максимальное значение 22Устанавливает уровень сжатия для сжатия бинарных журналов транзакций на этом сервере, который включен системной переменной
binlog_transaction_compression. Значение — целое число, определяющее сложность сжатия от 1 (наименьшая сложность) до 22 (наибольшая сложность). Если вы не укажете эту системную переменную, уровень сжатия устанавливается в 3.Установка
binlog_transaction_compression_level_zstdне оказывает немедленного влияния, а применяется ко всем последующим операциямSTART REPLICA.По мере увеличения уровня сжатия увеличивается коэффициент сжатия данных, что уменьшает занимаемое место и полосу пропускания сети, необходимую для данных транзакции. Однако сложность сжатия данных также увеличивается, занимая время и ресурсы ЦП и памяти на сервере-источнике. Увеличение сложности сжатия не имеет линейной зависимости от увеличения коэффициента сжатия данных.
Это системная переменная не может быть изменена в рамках транзакции. Установка значения сеанса этой системной переменной — ограниченная операция. Пользователь сеанса должен иметь достаточные привилегии для установки ограниченных переменных сеанса. См. Раздел 7.1.9.1, «Привилегии на системные переменные».
Эта переменная не влияет на запись транзакций в таблицы
NDB; используйтеndb_log_transaction_compression_level_zstdвместо этого. -
binlog_transaction_dependency_history_sizeФормат командной строки --binlog-transaction-dependency-history-size=#Системная переменная binlog_transaction_dependency_history_sizeОбласть действия Глобальная Динамическая Да SET_VARПрименяется ли подсказкаНет Тип Целое число Значение по умолчанию 25000Минимальное значение 1Максимальное значение 1000000Устанавливает верхний предел числа хэшей строк, которые хранятся в памяти и используются для поиска последней транзакции, изменившей данную строку. После достижения этого числа хэшей, история очищается.
-
Системная переменная log_binОбласть действия Глобальная Динамическая Нет SET_VARПрименяется ли подсказкаНет Тип Булево Показывает состояние ведения бинарного журнала на сервере, либо включено (
ON), либо выключено (OFF). При включенном ведении бинарного журнала сервер записывает все операторы, изменяющие данные, в бинарный журнал, который используется для резервного копирования и репликации.ONозначает, что бинарный журнал доступен,OFFозначает, что он не используется. Опция--log-binможет быть использована для указания базового имени и расположения бинарного журнала.В более ранних версиях MySQL ведение бинарного журнала было отключено по умолчанию, и включалось, если вы указывали опцию
--log-bin. Ведение бинарного журнала включено по умолчанию, с системной переменнойlog_binустановленной вON, независимо от того, указали вы опцию--log-binили нет. Исключением является случай, когда вы используете mysqld для ручного инициализации каталога данных, вызвав его с опцией--initializeили--initialize-insecure, когда ведение бинарного журнала отключено по умолчанию. В этом случае можно включить ведение бинарного журнала, указав опцию--log-bin.Если опция
--skip-log-binили--disable-log-binуказана при запуске, ведение бинарного журнала отключено, с системной переменнойlog_binустановленной вOFF. Если указана любая из этих опций, и также указана опция--log-bin, то применяется опция, указанная позже.Информацию о формате и управлении бинарным журналом см. в Разделе 7.4.4, «Бинарный журнал».
-
Переменная системы log_bin_basenameОбласть действия Глобальная Динамическая Нет SET_VARПрименяется подсказкаНет Тип Имя файла Содержит имя и путь к файлам бинарного журнала, которые можно задать с помощью серверного параметра
--log-bin. Максимальная длина переменной составляет 256 символов. В MySQL 9.2, если параметр--log-binне указан, используется имя по умолчаниюbinlog. Для совместимости с MySQL 5.7, если параметр--log-binуказан без строки или со значением пустой строки, используется имя по умолчанию, используя имя хоста. По умолчанию расположение находится в каталоге данных.host_name-bin -
Формат командной строки --log-bin-index=file_nameПеременная системы log_bin_indexОбласть действия Глобальная Динамическая Нет SET_VARПрименяется подсказкаНет Тип Имя файла Содержит имя и путь к файлу индекса бинарного журнала, который можно задать с помощью серверного параметра
--log-bin-index. Максимальная длина переменной составляет 256 символов. -
log_bin_trust_function_creatorsФормат командной строки --log-bin-trust-function-creators[={OFF|ON}]Устаревший Да Переменная системы log_bin_trust_function_creatorsОбласть действия Глобальная Динамическая Да SET_VARПрименяется подсказкаНет Тип Булево Значение по умолчанию OFFЭта переменная применяется при включённом бинарном протоколировании. Она управляет тем, можно ли доверять создателям хранимых функций, чтобы они не создавали хранимые функции, которые могут привести к записи небезопасных событий в бинарный журнал. Если установлено значение 0 (по умолчанию), пользователи не могут создавать или изменять хранимые функции, если у них нет привилегии
SUPERв дополнение к привилегииCREATE ROUTINEилиALTER ROUTINE. Значение 0 также накладывает ограничение, что функция должна быть объявлена с характеристикойDETERMINISTICили с характеристикамиREADS SQL DATAилиNO SQL. Если переменная установлена в 1, MySQL не накладывает этих ограничений на создание хранимых функций. Эта переменная также применяется к созданию триггеров. См. Раздел 27.8, “Протоколирование бинарных данных хранимых процедур”. -
Формат командной строки --log-replica-updates[={OFF|ON}]Переменная системы log_replica_updatesОбласть действия Глобальная Динамическая Нет SET_VARПрименяется подсказкаНет Тип Булево Значение по умолчанию ONlog_replica_updatesуказывает, должны ли обновления, полученные сервером-репликой от сервера-источника репликации, записываться в собственный бинарный журнал реплики.Включение этой переменной заставляет реплику записывать обновления, полученные от источника и выполненные репликационным SQL-потоком, в собственный бинарный журнал реплики. Бинарное протоколирование, которое управляется параметром
--log-binи включено по умолчанию, также должно быть включено на реплике для протоколирования обновлений. См. Раздел 19.1.6, “Параметры и переменные репликации и бинарного протоколирования”.log_replica_updatesвключено по умолчанию, если вы не укажете--skip-log-binдля отключения бинарного протоколирования, в этом случае MySQL также отключает протоколирование обновлений реплики по умолчанию. Если вам нужно отключить протоколирование обновлений реплики при включённом бинарном протоколировании, укажите--log-replica-updates=OFFпри запуске сервера репликации.Включение
log_replica_updatesпозволяет цепочку серверов репликации. Например, вы можете настроить сервера репликации таким образом:A -> B -> C
Здесь
Aслужит источником для репликиB, аBслужит источником для репликиC. Для этогоBдолжен быть как источником, так и репликой. При включенном бинарном протоколировании и включенномlog_replica_updates, которые являются значениями по умолчанию, обновления, полученные отA, протоколируютсяBв его бинарном журнале и, следовательно, могут быть переданыC. -
Формат командной строки --log-slave-updates[={OFF|ON}]Устаревший Да Переменная системы log_slave_updatesОбласть действия Глобальная Динамическая Нет SET_VARПрименяется подсказкаНет Тип Булево Значение по умолчанию ONУстаревшее псевдоним для
log_replica_updates. -
log_statements_unsafe_for_binlogФормат командной строки --log-statements-unsafe-for-binlog[={OFF|ON}]Устаревший Да Переменная системы log_statements_unsafe_for_binlogОбласть действия Глобальная Динамическая Да SET_VARПрименяется подсказкаНет Тип Булево Значение по умолчанию ONПри возникновении ошибки 1592 управляет добавлением предупреждений в журнал ошибок.
-
Формат командной строки --master-verify-checksum[={OFF|ON}]Устаревший Да Переменная системы master_verify_checksumОбласть действия Глобальная Динамическая Да SET_VARПрименяется подсказкаНет Тип Булево Значение по умолчанию OFFУстаревшее псевдоним для
source_verify_checksum.
-
Формат командной строки --max-binlog-cache-size=#Системная переменная max_binlog_cache_sizeОбласть действия Глобальная Динамическая Да SET_VARПрименяется ли подсказкаНет Тип Целое число Значение по умолчанию (64-битные платформы) 18446744073709547520Значение по умолчанию (32-битные платформы) 4294967295Минимальное значение 4096Максимальное значение (64-битные платформы) 18446744073709547520Максимальное значение (32-битные платформы) 4294967295Единица измерения байты Размер блока 4096Если транзакции требуют больше байтов, чем это значение, сервер генерирует ошибку Для многострочной транзакции требуется более 'max_binlog_cache_size' байтов памяти. Когда
gtid_modeнеON, рекомендуемое максимальное значение составляет 4 ГБ, так как в этом случае MySQL не может работать с позициями бинарного лога, превышающими 4 ГБ; когдаgtid_modeравноON, это ограничение не применяется, и сервер может работать с позициями бинарного лога произвольного размера.Если из-за того, что
gtid_modeнеON, или по какой-либо другой причине, вам необходимо гарантировать, что бинарный лог не превысит заданный размерmaxsize, вы должны установить эту переменную в соответствии со следующей формулой:max_binlog_cache_size < (((
maxsize-max_binlog_size) /max_connections) - 1000) / 1.2Этот расчет учитывает следующие условия:
Сервер записывает в бинарный лог, пока его размер до начала записи меньше
max_binlog_size.Сервер не записывает отдельные транзакции, а группы транзакций. Максимальное возможное число транзакций в группе равно
max_connections.Сервер записывает данные, которые не включены в кэш. Это включает 4-байтовый контрольную сумму для каждого события; хотя это добавляет менее 20% к размеру транзакции, это значение не является незначительным. Кроме того, сервер записывает
Gtid_log_eventдля каждой транзакции; каждое из этих событий может добавить еще 1 КБ к тому, что записывается в бинарный лог.
max_binlog_cache_sizeустанавливает размер только кэша транзакций; верхний предел для кэша инструкций регулируется системной переменнойmax_binlog_stmt_cache_size.Видимость
max_binlog_cache_sizeдля сеансов соответствует видимостью системной переменнойbinlog_cache_size; другими словами, изменение её значения влияет только на новые сеансы, запущенные после изменения значения. -
Формат командной строки --max-binlog-size=#Системная переменная max_binlog_sizeОбласть действия Глобальная Динамическая Да SET_VARПрименяется ли подсказкаНет Тип Целое число Значение по умолчанию 1073741824Минимальное значение 4096Максимальное значение 1073741824Единица измерения байты Размер блока 4096Если запись в бинарный лог приводит к превышению размера текущего файла лога, сервер переключает бинарные лог-файлы (закрывает текущий файл и открывает следующий). Минимальное значение — 4096 байт. Максимальное и значение по умолчанию — 1 ГБ. Для зашифрованных файлов бинарного лога имеется дополнительный заголовок размером 512 байт, который включен в
max_binlog_size.Транзакция записывается в бинарный лог одним блоком, поэтому она никогда не разбивается между несколькими бинарными логами. Поэтому, если у вас большие транзакции, вы можете увидеть файлы бинарного лога, размер которых больше
max_binlog_size.Если
max_relay_log_sizeравно 0, значениеmax_binlog_sizeтакже применяется к релейным логам.При использовании GTID на сервере, когда достигнуто значение
max_binlog_size, если системная таблицаmysql.gtid_executedнедоступна для записи GTID из текущего файла бинарного лога, бинарный лог не может быть переключен. В этой ситуации сервер реагирует в соответствии с настройкойbinlog_error_action. ЕслиIGNORE_ERRORустановлено, на сервере регистрируется ошибка, и ведение бинарного лога останавливается, или еслиABORT_SERVERустановлено, сервер завершается. -
Формат командной строки --max-binlog-stmt-cache-size=#Системная переменная max_binlog_stmt_cache_sizeОбласть действия Глобальная Динамическая Да SET_VARПрименяется ли подсказкаНет Тип Целое число Значение по умолчанию 18446744073709547520Минимальное значение 4096Максимальное значение 18446744073709547520Единица измерения байты Размер блока 4096Если нетранзакционные инструкции в рамках транзакции требуют больше памяти, чем это значение, сервер генерирует ошибку. Минимальное значение — 4096. Максимальное и значение по умолчанию — 4 ГБ на 32-битных платформах и 16 ЭБ (экзабайт) на 64-битных платформах.
max_binlog_stmt_cache_sizeустанавливает размер только кэша инструкций; верхний предел для кэша транзакций определяется исключительно системной переменнойmax_binlog_cache_size. -
Системная переменная original_commit_timestampОбласть действия Сеанс Динамическая Да SET_VARПрименяется ли подсказкаНет Тип Числовой Для внутреннего использования репликацией. При повторном выполнении транзакции на реплике это устанавливается в момент фиксации транзакции на исходном источнике, измеряемый в микросекундах с начала эпохи. Это позволяет распространять исходную метку времени фиксации по всей топологии репликации.
Установка значения сеанса этой системной переменной — это ограниченная операция. Пользователь сеанса должен иметь либо привилегию
REPLICATION_APPLIER(см. Раздел 19.3.3, «Проверки привилегий репликации»), либо привилегии, достаточные для установки ограниченных переменных сеанса (см. Раздел 7.1.9.1, «Привилегии на системные переменные»). Однако обратите внимание, что переменная не предназначена для установки пользователями; она устанавливается автоматически инфраструктурой репликации.
-
Формат командной строки --source-verify-checksum[={OFF|ON}]Системная переменная source_verify_checksumОбласть действия Глобальная Динамическая Да SET_VARПрименимо к подсказкамНет Тип Булево Значение по умолчанию OFFВключение
source_verify_checksumзаставляет источник проверять события, считываемые из двоичного журнала, проверяя контрольные суммы, и останавливаться с ошибкой в случае несоответствия.source_verify_checksumпо умолчанию отключен; в этом случае источник использует длину события из двоичного журнала для проверки событий, так что из двоичного журнала считываются только полные события. -
Системная переменная sql_log_binОбласть действия Сеанс Динамическая Да SET_VARПрименимо к подсказкамНет Тип Булево Значение по умолчанию ONЭта переменная управляет тем, включено ли ведение журнала в двоичный журнал для текущего сеанса (при условии, что сам двоичный журнал включен). Значение по умолчанию —
ON. Чтобы отключить или включить ведение журнала двоичного файла для текущего сеанса, установите системную переменную сеансаsql_log_binнаOFFилиON.Установите эту переменную в
OFFдля сеанса, чтобы временно отключить ведение журнала двоичного файла при внесении изменений в источник, которые вы не хотите реплицировать на реплику.Установка значения этой системной переменной в сеансе — ограниченная операция. Пользователь сеанса должен иметь достаточные привилегии для установки ограниченных переменных сеанса. См. Раздел 7.1.9.1, «Привилегии на системные переменные».
Невозможно установить значение сеанса
sql_log_binв рамках транзакции или подзапроса.Установка этой переменной на
OFFпредотвращает назначение GTID для транзакций в двоичном журнале. Если вы используете GTID для репликации, это означает, что даже когда ведение журнала двоичного файла будет позже снова включено, GTID, записанные в журнал с этого момента, не учитывают никакие транзакции, произошедшие тем временем, поэтому фактически эти транзакции теряются. -
Формат командной строки --sync-binlog=#Системная переменная sync_binlogОбласть действия Глобальная Динамическая Да SET_VARПрименимо к подсказкамНет Тип Целое Значение по умолчанию 1Минимальное значение 0Максимальное значение 4294967295Управляет частотой синхронизации двоичного журнала на диск сервером MySQL.
sync_binlog=0: Отключает синхронизацию двоичного журнала на диск сервером MySQL. Вместо этого сервер MySQL полагается на операционную систему для записи двоичного журнала на диск время от времени, как и для любого другого файла. Это значение обеспечивает лучшую производительность, но в случае сбоя электропитания или сбоя операционной системы возможно, что сервер выполнил коммиты транзакций, которые не были синхронизированы в двоичный журнал.sync_binlog=1: Включает синхронизацию двоичного журнала на диск перед выполнением коммита транзакций. Это самое безопасное значение, но может негативно сказаться на производительности из-за увеличения числа операций записи на диск. В случае сбоя электропитания или сбоя операционной системы транзакции, отсутствующие в двоичном журнале, находятся только в подготовленном состоянии. Это позволяет автоматической процедуре восстановления отменить транзакции, что гарантирует, что ни одна транзакция не потеряется из двоичного журнала.sync_binlog=, гдеNN— значение, отличное от 0 или 1: двоичный журнал синхронизируется на диск после того, как будет собраноNгрупп коммитов двоичного журнала. В случае сбоя электропитания или сбоя операционной системы возможно, что сервер выполнил коммиты транзакций, которые не были записаны в двоичный журнал. Это значение может негативно повлиять на производительность из-за увеличения числа операций записи на диск. Более высокое значение улучшает производительность, но увеличивает риск потери данных.
Для обеспечения максимальной надежности и согласованности в настройке репликации, использующей
InnoDBс транзакциями, используйте следующие значения:ПредупреждениеМногие операционные системы и некоторые устройства хранения данных обманывают операцию записи на диск. Они могут сказать mysqld, что запись выполнена, даже если это не так. В этом случае устойчивость транзакций не гарантируется даже с рекомендуемыми значениями, и в худшем случае сбой питания может привести к повреждению данных
InnoDB. Использование кэша диска с батарейным питанием в контроллере SCSI-диска или в самом диске ускоряет запись на диск и делает операцию безопаснее. Вы также можете попробовать отключить кэширование операций записи на диск в аппаратных кэшах.
© 2025 Oracle
Licensed under the GPLv2 License.