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 8.4 двоичное протоколирование включено по умолчанию, независимо от того, указали ли вы параметр
--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 8.4 поддерживает контрольные суммы, поэтому участники группы могут использовать значение по умолчанию.
Изменение значения
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 8.4 двоичное протоколирование включено по умолчанию и использует по умолчанию формат на основе строк.Примечаниеbinlog_formatустарела и может быть удалена в будущих версиях MySQL. Это означает, что поддержка форматов протоколирования, отличных от на основе строк, также может быть удалена в будущих выпусках. Поэтому для новых установок MySQL Replication следует использовать только протоколирование на основе строк.binlog_formatможно установить при запуске или во время выполнения, за исключением случаев, когда в некоторых условиях изменение этой переменной во время выполнения невозможно или приводит к сбою репликации, как описано далее.Значение по умолчанию —
ROW. Исключение: в NDB Cluster значение по умолчанию —MIXED; репликация на основе операторов не поддерживается для NDB Cluster.Установка сеансового значения этой системной переменной — ограниченная операция. Пользователь сеанса должен иметь соответствующие привилегии для установки ограниченных сеансовых переменных. См. Раздел 7.1.9.1, «Привилегии системных переменных».
Правила, определяющие, когда вступают в силу изменения этой переменной и как долго они действуют, такие же, как и для других системных переменных сервера MySQL. Дополнительную информацию см. в Разделе 15.7.6.1, «Синтаксис SET для присваивания переменных».
При указании
MIXEDиспользуется репликация на основе операторов, за исключением случаев, когда гарантируется правильность результатов только с репликацией на основе строк. Например, это происходит, когда операторы содержат загружаемые функции или функциюUUID().Подробности о том, как обрабатываются хранимые программы (хранимые процедуры и функции, триггеры и события) при настройке каждого формата двоичного протоколирования, см. в Разделе 27.7, «Двоичное протоколирование хранимых программ».
Существуют исключения, когда вы не можете изменить формат репликации во время выполнения:
Формат репликации нельзя изменить внутри хранимой функции или триггера.
Если сеанс имеет открытые временные таблицы, формат репликации для сеанса изменить нельзя (
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Область действия Глобальная Динамическая Да 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 на основе строк каждый событие изменения строки содержит два изображения: «до» (before), столбцы которого сопоставляются при поиске строки, подлежащей обновлению, и «после» (after), содержащее изменения. Обычно 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 8.4 сервера не имеет бинарного журнала, он может принимать, обрабатывать и отображать сжатые данные транзакций независимо от значения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 8.4, если параметр--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.7, «Двоичное протоколирование хранимых программ». -
Формат командной строки --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.