16.1.6.4 Параметры и переменные лог-файлов двоичного протокола
Вы можете использовать параметры и системные переменные mysqld, описанные в этом разделе, для управления работой лог-файлов двоичного протокола и определения, какие операторы записываются в лог-файл. Дополнительную информацию о лог-файле двоичного протокола см. в разделе 5.4.4 «Лог-файл двоичного протокола». Дополнительную информацию об использовании параметров и системных переменных сервера MySQL см. в разделе 5.1.6 «Параметры командной строки сервера» и разделе 5.1.7 «Системные переменные сервера».
Параметры запуска, используемые с лог-файлами двоичного протокола
В следующем списке описаны параметры запуска для включения и настройки лог-файла двоичного протокола. Системные переменные, используемые с лог-файлами двоичного протокола, обсуждаются позднее в этом разделе.
-
Формат командной строки --binlog-row-event-max-size=#Тип Целое число Значение по умолчанию 8192Минимальное значение 256Максимальное значение (64-разрядные платформы) 18446744073709551615Максимальное значение (32-разрядные платформы) 4294967295Единицы измерения байты Укажите максимальный размер события лог-файла двоичного протокола на основе строк в байтах. Строки объединяются в события, размер которых меньше этого значения, если это возможно. Значение должно быть кратно 256. Значение по умолчанию — 8192. См. раздел 16.2.1 «Форматы репликации».
-
Формат командной строки --log-bin=file_nameТип Имя файла Включает ведение лога двоичного протокола. При включенном ведении лога двоичного протокола сервер записывает все операторы, изменяющие данные, в лог-файл двоичного протокола, который используется для резервного копирования и репликации. Лог-файл двоичного протокола представляет собой последовательность файлов с базовым именем и числовым расширением. Сведения о формате и управлении лог-файлом двоичного протокола см. в разделе 5.4.4 «Лог-файл двоичного протокола».
Если вы предоставите значение для параметра
--log-bin, это значение будет использоваться в качестве базового имени последовательности лога. Сервер создает файлы лога двоичного протокола последовательно, добавляя числовой суффикс к базовому имени. В MySQL 5.7 базовое имя по умолчанию —, используя имя машины-хоста. Рекомендуется указать базовое имя, чтобы можно было продолжать использовать те же имена файлов лога двоичного протокола независимо от изменений в имени по умолчанию.host_name-binПо умолчанию лог-файлы двоичного протокола находятся в каталоге данных. Вы можете использовать параметр
--log-binдля указания альтернативного расположения, добавив полное абсолютное имя пути к базовому имени, чтобы указать другой каталог. Когда сервер считывает запись из файла индекса лога двоичного протокола, который отслеживает используемые файлы лога двоичного протокола, он проверяет, содержит ли запись относительный путь. Если это так, то относительная часть пути заменяется абсолютным путем, заданным с помощью параметра--log-bin. Абсолютный путь, записанный в файле индекса лога двоичного протокола, остается неизменным; в таком случае файл индекса необходимо отредактировать вручную, чтобы включить использование нового пути или путей. (В более старых версиях MySQL требовалось ручное вмешательство всякий раз при перемещении файлов лога двоичного протокола или релейного лога.) (Ошибка #11745230, Ошибка #12133)Установка этого параметра приводит к тому, что системная переменная
log_binустанавливается в значениеON(или1), а не в базовое имя. Базовое имя файла лога двоичного протокола и любой указанный путь доступны как системная переменнаяlog_bin_basename.Если вы укажете параметр
--log-binбез указания также системной переменнойserver_id, запуск сервера запрещен. (Ошибка #11763963, Ошибка #56739)При использовании GTID на сервере, если ведение лога двоичного протокола не включено при перезапуске сервера после аварийного завершения работы, некоторые GTID могут быть потеряны, что приведет к сбоям репликации. При нормальном завершении работы набор GTID из текущего файла лога двоичного протокола сохраняется в таблице
mysql.gtid_executed. После аварийного завершения работы, при котором это не произошло, во время восстановления GTID добавляются в таблицу из файла лога двоичного протокола при условии, что ведение лога двоичного протокола все еще включено. Если ведение лога двоичного протокола отключено для перезапуска сервера, сервер не может получить доступ к файлу лога двоичного протокола для восстановления GTID, поэтому репликация не может быть запущена. Ведение лога двоичного протокола можно безопасно отключить после нормального завершения работы.Если вы хотите отключить ведение лога двоичного протокола при запуске сервера, но сохранить настройку
--log-bin, вы можете указать параметр--skip-log-binили--disable-log-binпри запуске. Укажите параметр после параметра--log-bin, чтобы он имел приоритет. При отключенном ведении лога двоичного протокола системная переменнаяlog_binустанавливается в значение OFF. -
Формат командной строки --log-bin-index=file_nameСистемная переменная log_bin_indexОбласть действия Глобальная Динамическая Нет Тип Имя файла Имя файла индекса лога двоичного протокола, содержащего имена файлов лога двоичного протокола. По умолчанию он имеет то же расположение и базовое имя, что и значение, указанное для файлов лога двоичного протокола с помощью параметра
--log-bin, плюс расширение.index. Если вы не укажете--log-bin, по умолчанию имя файла индекса лога двоичного протокола —binlog.index. Если вы опустите имя файла и не укажете его с--log-bin, по умолчанию имя файла индекса лога двоичного протокола —, используя имя машины-хоста.host_name-bin.indexСведения о формате и управлении лог-файлом двоичного протокола см. в разделе 5.4.4 «Лог-файл двоичного протокола».
Параметры выбора операторов. Параметры в следующем списке влияют на то, какие операторы записываются в лог-файл двоичного протокола, а значит, отправляются сервером репликации-источником своим репликам. Существуют также параметры для серверов реплик, которые управляют тем, какие операторы, полученные от источника, должны выполняться или игнорироваться. Подробности см. в разделе 16.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.До MySQL 5.7.2 этот параметр приводил к тому, что инструкции, содержащие полные имена таблиц, не протоколировались, если не была указана базовая база данных (то есть, когда
SELECTDATABASE()возвращалNULL). В MySQL 5.7.2 и выше, когда базовая база данных не задана, никакие параметры--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 является значением по умолчанию. Вы не можете изменить значение этого параметра в рамках транзакции.
Для управления чтением контрольных сумм репликой (из журнала репликации) используйте параметр --slave-sql-verify-checksum.
Параметры тестирования и отладки. Следующие параметры двоичного журнала используются при тестировании и отладке репликации. Они не предназначены для использования в обычных операциях.
-
Формат командной строки --max-binlog-dump-events=#Тип Целое число Значение по умолчанию 0Этот параметр используется внутренне набором тестов MySQL для тестирования и отладки репликации.
-
Формат командной строки --sporadic-binlog-dump-fail[={OFF|ON}]Тип Булево Значение по умолчанию OFFЭтот параметр используется внутренне набором тестов MySQL для тестирования и отладки репликации.
Системные переменные, используемые с двоичным протоколированием
В этом списке описаны системные переменные для управления двоичным протоколированием. Их можно установить при запуске сервера, а некоторые из них можно изменить во время работы, используя SET. Параметры сервера, используемые для управления двоичным протоколированием, перечислены ранее в этом разделе.
-
Формат командной строки --binlog-cache-size=#Системная переменная binlog_cache_sizeОбласть действия Глобальная Динамическая Да Тип Целое число Значение по умолчанию 32768Минимальное значение 4096Максимальное значение (64-битные платформы) 18446744073709547520Максимальное значение (32-битные платформы) 4294963200Единица измерения байты Размер блока 4096Размер кэша для хранения изменений в двоичном журнале во время транзакции.
Двоичный кэш журнала выделяется для каждого клиента, если сервер поддерживает движки хранилища транзакций и если на сервере включено двоичное протоколирование (
--log-binпараметр). Если вы часто используете большие транзакции, вы можете увеличить этот размер кэша для повышения производительности. Системные переменные состоянияBinlog_cache_useиBinlog_cache_disk_useмогут быть полезны для настройки размера этой переменной. См. Раздел 5.4.4, «Двоичный журнал».binlog_cache_sizeустанавливает размер только кэша транзакций; размер кэша операторов управляется системной переменнойbinlog_stmt_cache_size. -
Формат командной строки --binlog-checksum=typeСистемная переменная binlog_checksumОбласть действия Глобальная Динамическая Да Тип Строка Значение по умолчанию CRC32Допустимые значения NONECRC32При включении этой переменной источник записывает контрольную сумму для каждого события в двоичном журнале.
binlog_checksumподдерживает значенияNONE(выключено) иCRC32. По умолчанию значениеCRC32. Вы не можете изменить значениеbinlog_checksumвнутри транзакции.Когда
binlog_checksumотключена (значениеNONE), сервер проверяет, что он записывает только полные события в двоичный журнал, записывая и проверяя длину события (а не контрольную сумму) для каждого события.Изменение значения этой переменной приводит к переротации двоичного журнала; контрольные суммы всегда записываются в весь файл двоичного журнала, а не только в его часть.
Установка этой переменной на источнике в значение, не распознаваемое репликой, приводит к установке репликой своего значения
binlog_checksumнаNONEи остановке репликации с ошибкой. (Ошибка #13553750, Ошибка #61096) Если обратная совместимость со старыми репликами является проблемой, вы можете установить значение явно наNONE. -
binlog_direct_non_transactional_updatesФормат командной строки --binlog-direct-non-transactional-updates[={OFF|ON}]Системная переменная binlog_direct_non_transactional_updatesОбласть действия Глобальная, сеанс Динамическая Да Тип Булево Значение по умолчанию OFFИз-за проблем с одновременностью реплика может стать несогласованной, когда транзакция содержит обновления как для транзакционных, так и для нетранзакционных таблиц. MySQL пытается сохранить причинно-следственную связь между этими операторами, записывая нетранзакционные операторы в кэш транзакций, который сбрасывается при подтверждении. Однако возникают проблемы, когда изменения, внесенные в нетранзакционные таблицы от имени транзакции, становятся немедленно видимыми другим подключениям, потому что эти изменения могут не быть немедленно записаны в двоичный журнал.
Переменная
binlog_direct_non_transactional_updatesпредлагает одно возможное решение этой проблемы. По умолчанию эта переменная выключена. Включениеbinlog_direct_non_transactional_updatesприводит к записи обновлений в нетранзакционные таблицы непосредственно в двоичный журнал, а не в кэш транзакций.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-error-action[=value]Системная переменная binlog_error_actionОбласть действия Глобальная Динамическая Да Тип Перечисление Значение по умолчанию ABORT_SERVERДопустимые значения IGNORE_ERRORABORT_SERVERУправляет тем, что происходит, когда сервер сталкивается с ошибкой, например, не может записать, сбросить или синхронизировать двоичный журнал, что может привести к несогласованности двоичного журнала источника и потере синхронизации реплик.
В MySQL 5.7.7 и выше эта переменная по умолчанию имеет значение
ABORT_SERVER, что заставляет сервер останавливать протоколирование и завершать работу всякий раз, когда он сталкивается с такой ошибкой в двоичном журнале. При перезапуске восстановление происходит так же, как и в случае неожиданной остановки сервера (см. Раздел 16.3.2, «Обработка неожиданной остановки реплики»).Если
binlog_error_actionустановлено наIGNORE_ERROR, если сервер сталкивается с такой ошибкой, он продолжает текущую транзакцию, записывает ошибку, затем останавливает протоколирование и продолжает выполнение обновлений. Для возобновления двоичного протоколирования необходимо снова включитьlog_bin, что требует перезапуска сервера. Эта настройка обеспечивает обратную совместимость со старыми версиями MySQL.В предыдущих выпусках эта переменная называлась
binlogging_impossible_mode.
-
Формат командной строки --binlog-format=formatСистемная переменная binlog_formatОбласть Глобальная, Сеанс Динамическая Да Тип Перечисление Значение по умолчанию ROWДопустимые значения MIXEDSTATEMENTROWЭта системная переменная задаёт формат бинарного протоколирования и может принимать любое из значений
STATEMENT,ROWилиMIXED. См. Раздел 16.2.1, «Форматы репликации». Настройка вступает в силу при включении бинарного протоколирования на сервере, что происходит, когда системная переменнаяlog_binустановлена в значениеON. В MySQL 5.7 бинарное протоколирование по умолчанию выключено, и его необходимо включить с помощью опции--log-bin.binlog_formatможно настроить при запуске или в процессе работы, за исключением некоторых случаев, когда изменение этой переменной во время работы невозможно или приводит к сбою репликации, как описано ниже.До MySQL 5.7.7 значением по умолчанию был
STATEMENT. В MySQL 5.7.7 и более поздних версиях по умолчанию используетсяROW. Исключение: в NDB Cluster значение по умолчаниюMIXED; репликация на основе инструкций не поддерживается для NDB Cluster.Установка значения сеанса этой системной переменной является ограниченной операцией. Пользователь сеанса должен иметь достаточные привилегии для установки ограниченных переменных сеанса. См. Раздел 5.1.8.1, «Привилегии на системные переменные».
Правила, определяющие, когда изменения этой переменной вступают в силу и как долго действует эффект, такие же, как и для других системных переменных MySQL-сервера. Дополнительную информацию см. в Разделе 13.7.4.1, «Синтаксис SET для задания переменных».
При использовании значения
MIXEDиспользуется репликация на основе инструкций, за исключением случаев, когда гарантируется корректность только репликации на основе строк. Например, это происходит, когда инструкции содержат загружаемые функции или функциюUUID().Подробности о том, как обрабатываются хранимые программы (хранимые процедуры и функции, триггеры и события) при установке каждого формата бинарного протоколирования, см. в Разделе 23.7, «Протоколирование хранимых программ».
Существуют исключения, когда нельзя изменить формат репликации во время работы:
Внутри хранимой функции или триггера.
Если сеанс в настоящее время находится в режиме репликации на основе строк и имеет открытые временные таблицы.
Внутри транзакции.
Попытка изменить формат в этих случаях приводит к ошибке.
Изменение формата протоколирования на сервере источника репликации не приводит к изменению формата протоколирования на реплике. Изменение формата репликации во время работы репликации может вызвать проблемы, если реплика имеет включенное бинарное протоколирование, а изменение приводит к тому, что реплика использует формат
STATEMENTпротоколирования, в то время как источник использует форматROWилиMIXED. Реплика не может преобразовать записи бинарного лога, полученные в форматеROWпротоколирования, в форматSTATEMENTдля использования в собственном бинарном логе, что может привести к сбою репликации. Дополнительную информацию см. в Разделе 5.4.4.2, «Указание формата бинарного лога».Формат бинарного лога влияет на поведение следующих параметров сервера:
Эти эффекты подробно рассматриваются в описаниях отдельных параметров.
-
binlog_group_commit_sync_delayФормат командной строки --binlog-group-commit-sync-delay=#Системная переменная binlog_group_commit_sync_delayОбласть Глобальная Динамическая Да Тип Целое число Значение по умолчанию 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может увеличить количество параллельных транзакций, совершающих коммит на любом сервере, имеющем (или, возможно, получившем после отключения) реплику, и, следовательно, может увеличить параллельное выполнение на репликах. Для получения выгоды от этого эффекта реплики должны иметь установленное значениеslave_parallel_type=LOGICAL_CLOCK, и эффект более значителен, когда установлено такжеbinlog_transaction_dependency_tracking=COMMIT_ORDER. Важно учитывать как пропускную способность источника, так и пропускную способность реплик при настройке параметра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Область Глобальная Динамическая Да Тип Целое число Значение по умолчанию 0Минимальное значение 0Максимальное значение 100000Максимальное число транзакций, ожидаемых до отмены текущей задержки, как указано в
binlog_group_commit_sync_delay. Еслиbinlog_group_commit_sync_delayустановлено в 0, то этот параметр не влияет.
-
Командная строка --binlog-max-flush-queue-time=#Устаревший Да Системная переменная binlog_max_flush_queue_timeОбласть действия Глобальная Динамическая Да Тип Целое число Значение по умолчанию 0Минимальное значение 0Максимальное значение 100000Единица измерения микросекунды Раньше это определяло время в микросекундах, необходимое для продолжения чтения транзакций из очереди флуша перед продолжением группового подтверждения. В MySQL 5.7 эта переменная больше не оказывает никакого влияния.
binlog_max_flush_queue_timeустарела с MySQL 5.7.9 и в будущем будет удалена из MySQL. -
Командная строка --binlog-order-commits[={OFF|ON}]Системная переменная binlog_order_commitsОбласть действия Глобальная Динамическая Да Тип Булево Значение по умолчанию ONКогда эта переменная включена на сервере источника репликации (что является значением по умолчанию), инструкции подтверждения транзакции, выданные движкам хранения, сериализуются в одном потоке, так что транзакции всегда подтверждаются в том же порядке, что и записываются в бинарный журнал. Отключение этой переменной позволяет выдавать инструкции подтверждения транзакций с использованием нескольких потоков. В сочетании с групповым подтверждением бинарного журнала это предотвращает то, что скорость подтверждения одной транзакции становится узким местом для производительности, и, следовательно, может улучшить производительность.
Транзакции записываются в бинарный журнал в тот момент, когда все участвующие движки хранения подтвердили, что транзакция готова к подтверждению. Логика группового подтверждения бинарного журнала затем подтверждает группу транзакций после их записи в бинарный журнал. Когда
binlog_order_commitsотключена, из-за использования нескольких потоков транзакции в группе подтверждения могут быть подтверждены в ином порядке, нежели в бинарном журнале. (Транзакции от одного клиента всегда подтверждаются в хронологическом порядке.) Во многих случаях это не имеет значения, поскольку операции, выполняемые в отдельных транзакциях, должны давать согласованные результаты, а если это не так, следует использовать одну транзакцию.Если необходимо гарантировать, что история транзакций на источнике и на многопоточной реплике остаются идентичными, установите
slave_preserve_commit_order=1на реплике. -
Командная строка --binlog-row-image=image_typeСистемная переменная binlog_row_imageОбласть действия Глобальная, Сеанс Динамическая Да Тип Перечисление Значение по умолчанию fullДопустимые значения full(Записывать все столбцы)minimal(Записывать только изменённые столбцы и столбцы, необходимые для идентификации строк)noblob(Записывать все столбцы, за исключением ненужных BLOB и TEXT столбцов)Для репликации MySQL на основе строк эта переменная определяет, как изображения строк записываются в бинарный журнал.
В репликации 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_rows_query_log_eventsКомандная строка --binlog-rows-query-log-events[={OFF|ON}]Системная переменная binlog_rows_query_log_eventsОбласть действия Глобальная, Сеанс Динамическая Да Тип Булево Значение по умолчанию OFFЭта системная переменная влияет только на журналирование на основе строк. При включении она заставляет сервер записывать информационные события, такие как события журнала запросов строк, в его бинарный журнал. Эта информация может использоваться для отладки и связанных целей, например, для получения исходного запроса, выданного на источнике, когда его невозможно восстановить по обновлениям строк.
Эти информационные события обычно игнорируются программами MySQL, считывающими бинарный журнал, и, таким образом, не вызывают проблем при репликации или восстановлении из резервной копии. Чтобы их просмотреть, увеличьте уровень подробности, используя параметр mysqlbinlog
--verboseдважды, либо как-vv, либо как--verbose --verbose.
-
Формат командной строки --binlog-stmt-cache-size=#Системная переменная binlog_stmt_cache_sizeОбласть Глобальная Динамическая Да Тип Целое число Значение по умолчанию 32768Минимальное значение 4096Максимальное значение (64-разрядные платформы) 18446744073709547520Максимальное значение (32-разрядные платформы) 4294963200Единица измерения байты Размер блока 4096Эта переменная определяет размер кэша двоичного журнала для хранения нетранзакционных операторов, выпущенных во время транзакции.
Отдельные кэши транзакций и операторов двоичного журнала выделяются для каждого клиента, если сервер поддерживает какие-либо транзакционные хранилища данных и если на сервере включён двоичный журнал (
--log-binпараметр). Если вы часто используете большие нетранзакционные операторы во время транзакций, вы можете увеличить размер этого кэша для повышения производительности. Переменные состоянияBinlog_stmt_cache_useиBinlog_stmt_cache_disk_useмогут быть полезны для настройки размера этой переменной. См. Раздел 5.4.4, «Двоичный журнал».Системная переменная
binlog_cache_sizeустанавливает размер кэша транзакций. -
binlog_transaction_dependency_trackingФормат командной строки --binlog-transaction-dependency-tracking=valueВведено 5.7.22 Системная переменная binlog_transaction_dependency_trackingОбласть Глобальная Динамическая Да Тип Перечисление Значение по умолчанию COMMIT_ORDERДопустимые значения COMMIT_ORDERWRITESETWRITESET_SESSIONИсточник информации о зависимости, который используется источником для определения транзакций, которые могут выполняться параллельно прикладной программой реплики с несколькими потоками. Эта переменная может принимать одно из трёх значений, описанных в следующем списке:
COMMIT_ORDER: Информация о зависимости генерируется из временных меток подтверждения источника. Это значение по умолчанию.WRITESET: Информация о зависимости генерируется из набора записей источника, и любые транзакции, которые записывают разные кортежи, могут быть выполнены параллельно.WRITESET_SESSION: Информация о зависимости генерируется из набора записей источника, и любые транзакции, которые записывают разные кортежи, могут быть выполнены параллельно, за исключением того, что любые два обновления от одной сессии не могут быть переупорядочены.
В режимах
WRITESETилиWRITESET_SESSIONтранзакции могут подтверждаться вне очереди, если вы также не установитеslave_preserve_commit_order=1.Для некоторых транзакций режимы
WRITESETиWRITESET_SESSIONне могут улучшить результаты, которые были бы получены в режимеCOMMIT_ORDER. Это относится к транзакциям, которые имеют пустые или частичные наборы записей, транзакциям, которые обновляют таблицы без первичных или уникальных ключей, и транзакциям, которые обновляют родительские таблицы в отношении внешних ключей. В этих ситуациях источник использует режимCOMMIT_ORDERдля генерации информации о зависимости.Значение этой переменной не может быть установлено ни на что, кроме
COMMIT_ORDER, еслиtransaction_write_set_extractionимеет значениеOFF. Также следует отметить, что значениеtransaction_write_set_extractionнельзя изменить, если текущее значениеbinlog_transaction_dependency_trackingравноWRITESETилиWRITESET_SESSION. Если вы измените значение, новое значение не вступит в силу на репликах до тех пор, пока реплика не будет остановлена и перезапущена с помощью командSTOP SLAVEиSTART SLAVE.Количество хешей строк, которые нужно хранить и проверять для последней транзакции, изменившей заданную строку, определяется значением
binlog_transaction_dependency_history_size. -
binlog_transaction_dependency_history_sizeФормат командной строки --binlog-transaction-dependency-history-size=#Введено 5.7.22 Системная переменная binlog_transaction_dependency_history_sizeОбласть Глобальная Динамическая Да Тип Целое число Значение по умолчанию 25000Минимальное значение 1Максимальное значение 1000000Устанавливает верхний предел для количества хешей строк, которые хранятся в памяти и используются для поиска транзакции, которая в последний раз изменяла заданную строку. После достижения этого количества хешей история очищается.
-
Формат командной строки --expire-logs-days=#Системная переменная expire_logs_daysОбласть Глобальная Динамическая Да Тип Целое число Значение по умолчанию 0Минимальное значение 0Максимальное значение 99Единица измерения дней Количество дней для автоматического удаления файлов двоичного журнала. По умолчанию 0, что означает «автоматическое удаление не производится». Возможные удаления происходят при запуске и при сбросе двоичного журнала. Сброс журнала происходит так, как указано в Раздел 5.4, «Журналы MySQL-сервера».
Для удаления файлов двоичного журнала вручную используйте инструкцию
PURGE BINARY LOGS. См. Раздел 13.4.1.1, «Очистка двоичных журналов». -
Системная переменная log_binОбласть Глобальная Динамическая Нет Тип Булево Включен ли двоичный журнал. Если используется параметр
--log-bin, то значение этой переменной равноON; в противном случае оно равноOFF. Эта переменная сообщает только о состоянии ведения двоичного журнала (включено или выключено); она не сообщает фактическое значение, на которое установлен параметр--log-bin. -
Системная переменная log_bin_basenameОбласть Глобальная Динамическая Нет Тип Имя файла Содержит базовое имя и путь к файлам двоичного журнала, которые могут быть установлены с помощью параметра сервера
--log-bin. Максимальная длина переменной — 256. В MySQL 5.7 базовое имя по умолчанию — имя хоста с суффиксом-bin. По умолчанию расположение — директория данных. -
Формат командной строки --log-bin-index=file_nameСистемная переменная log_bin_indexОбласть Глобальная Динамическая Нет Тип Имя файла Содержит базовое имя и путь к файлу индекса двоичного журнала, который может быть установлен с помощью параметра сервера
--log-bin-index. Максимальная длина переменной — 256.
-
log_bin_trust_function_creatorsФормат командной строки --log-bin-trust-function-creators[={OFF|ON}]Системная переменная log_bin_trust_function_creatorsОбласть действия Глобальная Динамическая Да Тип Булево Значение по умолчанию OFFЭта переменная применяется, когда вклюжено двоичное журналирование. Она управляет тем, можно ли доверять создателям хранимых функций, чтобы они не создавали хранимые функции, которые приводят к записи небезопасных событий в двоичный журнал. Если установлено значение 0 (по умолчанию), пользователям не разрешается создавать или изменять хранимые функции, если у них нет привилегии
SUPERв дополнение к привилегииCREATE ROUTINEилиALTER ROUTINE. Установка значения 0 также обеспечивает ограничение, согласно которому функция должна быть объявлена с характеристикойDETERMINISTICили с характеристикойREADS SQL DATAилиNO SQL. Если переменной присвоено значение 1, MySQL не применяет эти ограничения к созданию хранимых функций. Эта переменная также применяется к созданию триггеров. См. Раздел 23.7, «Двоичное журналирование хранимых программ». -
Формат командной строки --log-bin-use-v1-row-events[={OFF|ON}]Системная переменная log_bin_use_v1_row_eventsОбласть действия Глобальная Динамическая Да Тип Булево Значение по умолчанию OFFИспользуется ли двоичное журналирование версии 2. Если эта переменная равна 0 (отключено, по умолчанию), используются события двоичного журнала версии 2. Если эта переменная равна 1 (включено), сервер записывает двоичный журнал с использованием событий журнала версии 1 (единственная версия событий двоичного журнала, используемая в предыдущих выпусках), и, таким образом, создает двоичный журнал, который может быть прочитан более старыми репликами.
MySQL 5.7 по умолчанию использует события двоичного журнала строк версии 2. Однако события версии 2 не могут быть прочитаны выпусками MySQL Server до MySQL 5.6.6. Включение
log_bin_use_v1_row_eventsзаставляет mysqld записывать двоичный журнал с использованием событий журнала версии 1.Эта переменная доступна только для чтения во время выполнения. Чтобы переключаться между двоичным журналированием событий версии 1 и версии 2, необходимо установить
log_bin_use_v1_row_eventsпри запуске сервера.Кроме случаев выполнения обновлений репликации NDB Cluster,
log_bin_use_v1_row_eventsв основном представляет интерес при настройке обнаружения и разрешения конфликтов репликации с использованиемNDB$EPOCH_TRANS()в качестве функции обнаружения конфликтов, которая требует событий двоичного журнала строк версии 2. Таким образом, эта переменная и--ndb-log-transaction-idнесовместимы.ПримечаниеMySQL NDB Cluster 7.5 по умолчанию использует события двоичного журнала строк версии 2. Следует помнить об этом при планировании обновлений или понижений уровня, а также для установок с использованием репликации NDB Cluster.
Для получения дополнительной информации см. Раздел 21.7.11, «Разрешение конфликтов репликации NDB Cluster».
-
log_builtin_as_identified_by_passwordФормат командной строки --log-builtin-as-identified-by-password[={OFF|ON}]Системная переменная log_builtin_as_identified_by_passwordОбласть действия Глобальная Динамическая Да Тип Булево Значение по умолчанию OFFЭта переменная влияет на двоичное журналирование операторов управления пользователями. При включении переменная имеет следующие эффекты:
Двоичное журналирование для операторов
CREATE USER, использующих встроенные подключаемые модули аутентификации, переписывает операторы, чтобы включить предложениеIDENTIFIED BY PASSWORD.Операторы
SET PASSWORDрегистрируются как операторыSET PASSWORD, а не переписываются в операторыALTER USER.Операторы
SET PASSWORDизменяются, чтобы регистрировать хэш пароля вместо предоставленного открытого (нешифрованного) пароля.
Включение этой переменной обеспечивает лучшую совместимость для межверсионной репликации с репликами 5.6 и более ранними, чем 5.7.6, а также для приложений, которые ожидают этот синтаксис в двоичном журнале.
-
Формат командной строки --log-slave-updates[={OFF|ON}]Системная переменная log_slave_updatesОбласть действия Глобальная Динамическая Нет Тип Булево Значение по умолчанию OFFСледует ли регистрировать обновления, полученные сервером-репликой от исходного сервера, в собственном двоичном журнале реплики.
Обычно реплика не регистрирует в своем собственном двоичном журнале обновления, полученные от исходного сервера. Включение этой переменной заставляет реплику записывать обновления, выполненные ее потоком репликации SQL, в свой собственный двоичный журнал. Для того чтобы этот параметр имел какое-либо значение, реплика также должна быть запущена с параметром
--log-binдля включения двоичного журналирования. См. Раздел 16.1.6, «Параметры и переменные репликации и двоичного журналирования».log_slave_updatesвключается, когда требуется объединение серверов репликации. Например, может потребоваться настроить серверы репликации, используя следующую схему:A -> B -> C
Здесь
Aвыступает в качестве источника для репликиB, аBвыступает в качестве источника для репликиC. Для того чтобы это работало,Bдолжен быть одновременно источником и репликой. Необходимо запустить какA, так иBс--log-binдля включения двоичного журналирования, аBс включеннымlog_slave_updates, чтобы обновления, полученные отA, регистрировалисьBв своем двоичном журнале. -
log_statements_unsafe_for_binlogФормат командной строки --log-statements-unsafe-for-binlog[={OFF|ON}]Введена 5.7.11 Системная переменная log_statements_unsafe_for_binlogОбласть действия Глобальная Динамическая Да Тип Булево Значение по умолчанию ONЕсли возникает ошибка 1592, управляет тем, добавляются ли сгенерированные предупреждения в журнал ошибок или нет.
-
Формат командной строки --master-verify-checksum[={OFF|ON}]Системная переменная master_verify_checksumОбласть действия Глобальная Динамическая Да Тип Булево Значение по умолчанию OFFВключение этой переменной заставляет источник проверять события, считываемые из двоичного журнала, путем проверки контрольных сумм и останавливаться с ошибкой в случае несоответствия.
master_verify_checksumотключена по умолчанию; в этом случае источник использует длину события из двоичного журнала для проверки событий, так что из двоичного журнала считываются только полные события.
-
Формат командной строки --max-binlog-cache-size=#Системная переменная max_binlog_cache_sizeОбласть действия Глобальная Динамическая Да Тип Целое число Значение по умолчанию (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Область действия Глобальная Динамическая Да Тип Целое число Значение по умолчанию 1073741824Минимальное значение 4096Максимальное значение 1073741824Единица измерения байты Размер блока 4096Если запись в двоичный лог приводит к превышению размера текущего файла лога, сервер вращает двоичные лог-файлы (закрывает текущий файл и открывает следующий). Минимальное значение составляет 4096 байтов. Максимальное и значение по умолчанию — 1 ГБ.
Транзакция записывается в двоичный лог одним блоком, поэтому она никогда не разделяется между несколькими двоичными логами. Поэтому, если у вас большие транзакции, вы можете увидеть файлы двоичного лога, больше чем
max_binlog_size.Если
max_relay_log_sizeравно 0, значениеmax_binlog_sizeприменяется и к релейным логам. -
Формат командной строки --max-binlog-stmt-cache-size=#Системная переменная max_binlog_stmt_cache_sizeОбласть действия Глобальная Динамическая Да Тип Целое число Значение по умолчанию 18446744073709547520Минимальное значение 4096Максимальное значение 18446744073709547520Единица измерения байты Размер блока 4096Если нетранзакционные инструкции внутри транзакции требуют более этого количества байтов памяти, сервер генерирует ошибку. Минимальное значение равно 4096. Максимальное и значение по умолчанию — 4 ГБ на 32-битных платформах и 16 ЭБ (эксабайт) на 64-битных платформах.
max_binlog_stmt_cache_sizeустанавливает размер только для кэша инструкций; верхний предел для кэша транзакций определяется исключительно системной переменнойmax_binlog_cache_size. -
Системная переменная sql_log_binОбласть действия Сессия Динамическая Да Тип Булево Значение по умолчанию ONЭта переменная определяет, включено ли ведение журнала в двоичный лог для текущей сессии (при условии, что сам двоичный лог включен). Значение по умолчанию равно
ON. Для отключения или включения ведения двоичного лога в текущей сессии установите системную переменную сессииsql_log_binнаOFFилиON.Установите эту переменную в
OFFдля сессии, чтобы временно отключить ведение журнала в двоичном логе, внося изменения в исходный код, который не нужно реплицировать на реплику.Установка значения для этой системной переменной в сессии — это ограниченная операция. Пользователь сессии должен иметь достаточные привилегии для установки ограниченных переменных сессии. См. Раздел 5.1.8.1, «Привилегии системных переменных».
Невозможно установить значение сессии
sql_log_binвнутри транзакции или подзапроса.Установление этой переменной в
OFFпредотвращает присвоение GTID транзакциям в двоичном логе. Если вы используете GTID для репликации, это означает, что даже когда ведение журнала в двоичном логе будет включено позже, GTID, записанные в лог с этого момента, не учитывают никаких транзакций, произошедших между тем, таким образом, эти транзакции теряются.Глобальная переменная
sql_log_binявляется только для чтения и не может быть изменена. Глобальная область действия устарела; ожидается, что она будет удалена в будущих версиях MySQL.
-
Формат командной строки --sync-binlog=#Переменная системы sync_binlogОбласть действия Глобальная Динамическая Да Тип Целое число Значение по умолчанию 1Минимальное значение 0Максимальное значение 4294967295Управляет частотой синхронизации двоичного журнала MySQL с диском.
sync_binlog=0: Отключает синхронизацию двоичного журнала на диск сервером MySQL. Вместо этого сервер MySQL полагается на операционную систему для периодической записи двоичного журнала на диск, как и для любого другого файла. Это значение обеспечивает лучшую производительность, но в случае сбоя питания или краха операционной системы возможно, что сервер выполнил транзакции, которые не были синхронизированы с двоичным журналом.sync_binlog=1: Включает синхронизацию двоичного журнала с диском перед подтверждением транзакций. Это самое безопасное значение, но может негативно сказаться на производительности из-за увеличения числа записей на диск. В случае сбоя питания или краха операционной системы транзакции, отсутствующие в двоичном журнале, находятся только в подготовленном состоянии. Это позволяет автоматической процедуре восстановления откатить транзакции, что гарантирует отсутствие потери транзакций из двоичного журнала.sync_binlog=, гдеNNимеет значение, отличное от 0 или 1: Двоичный журнал синхронизируется с диском после того, как было собраноNгрупп завершения записи в двоичный журнал. В случае сбоя питания или краха операционной системы возможно, что сервер выполнил транзакции, которые не были записаны на диск в двоичный журнал. Это значение может негативно повлиять на производительность из-за увеличения числа записей на диск. Более высокое значение улучшает производительность, но повышает риск потери данных.
Для максимальной надёжности и согласованности в настройках репликации, использующих
InnoDBс транзакциями, используйте следующие настройки:ВниманиеМногие операционные системы и некоторые устройства дисков обманывают операцию записи на диск. Они могут сообщить mysqld, что запись выполнена, даже если это не так. В этом случае надёжность транзакций не гарантируется даже при рекомендуемых настройках, и в худшем случае отключение питания может повредить
InnoDBданные. Использование кэша диска с батарейным питанием в контроллере SCSI-диска или в самом диске ускоряет запись на диск и делает операцию безопаснее. Вы также можете попробовать отключить кэширование записей на диск в аппаратных кэшах. -
transaction_write_set_extractionФормат командной строки --transaction-write-set-extraction[=value]Переменная системы transaction_write_set_extractionОбласть действия Глобальная, Сеанс Динамическая Да Тип Перечисление Значение по умолчанию OFFДопустимые значения (≥ 5.7.14) OFFMURMUR32XXHASH64Допустимые значения (≤ 5.7.13) OFFMURMUR32Определяет алгоритм, используемый для генерации хэша, идентифицирующего записи, связанные с транзакцией. Если вы используете Group Replication, значение хэша используется для обнаружения и обработки конфликтов в распределённой системе. На 64-битных системах, работающих с Group Replication, рекомендуется установить это значение на
XXHASH64, чтобы избежать ненужных коллизий хэшей, которые приводят к ошибкам сертификации и откату пользовательских транзакций. См. Раздел 17.3.1, «Требования к Group Replication».binlog_formatдолжно быть установлено наROW, чтобы изменить значение этой переменной. Если вы измените значение, новое значение не будет применяться на репликах до тех пор, пока реплика не будет остановлена и перезапущена с помощью командSTOP SLAVEиSTART SLAVE.ПримечаниеКогда
WRITESETилиWRITESET_SESSIONустанавливается в качестве значения дляbinlog_transaction_dependency_tracking,transaction_write_set_extractionдолжно быть установлено для указания алгоритма (не установлено наOFF). Пока текущее значениеbinlog_transaction_dependency_trackingравноWRITESETилиWRITESET_SESSION, вы не можете изменить значениеtransaction_write_set_extraction.
© 2025 Oracle
Licensed under the GPLv2 License.