16.1.6.3 Параметры и переменные реплики сервера
В этом разделе объясняются параметры сервера и системные переменные, применяемые к репликам, и содержатся следующие разделы:
Укажите параметры либо в командной строке, либо в файле параметров. Многие параметры можно установить во время работы сервера, используя оператор CHANGE MASTER TO. Значения системных переменных указываются с помощью SET.
Идентификатор сервера. На источнике и каждой реплике необходимо установить системную переменную server_id, чтобы установить уникальный идентификатор репликации в диапазоне от 1 до 232 − 1. “Уникальность” означает, что каждый идентификатор должен отличаться от любого другого идентификатора, используемого любым другим источником или репликой в топологии репликации. Пример файла my.cnf:
[mysqld]
server-id=3
Параметры запуска для реплик
В этом разделе объясняются параметры запуска для управления серверами-репликами. Многие из этих параметров можно установить во время работы сервера, используя инструкцию CHANGE MASTER
TO. Другие, такие как параметры --replicate-*, можно установить только при запуске сервера-реплики. Параметры системы, связанные с репликацией, обсуждаются далее в этом разделе.
-
Формат командной строки --log-warnings[=#]Устарело Да Системная переменная log_warningsОбласть действия Глобальная Динамическая Да Тип Целое число Значение по умолчанию 2Минимальное значение 0Максимальное значение (64-разрядные платформы) 18446744073709551615Максимальное значение (32-разрядные платформы) 4294967295ПримечаниеСистемная переменная
log_error_verbosityпредпочтительнее и должна использоваться вместо параметра--log-warningsили системной переменнойlog_warnings. Для получения дополнительной информации см. описанияlog_error_verbosityиlog_warnings. Параметр командной строки--log-warningsи системная переменнаяlog_warningsустарели; ожидается, что они будут удалены в будущей версии MySQL.Заставляет сервер записывать больше сообщений в журнал ошибок о том, что он делает. Что касается репликации, сервер генерирует предупреждения о том, что он успешно переподключился после сбоя сети или соединения, и предоставляет информацию о том, как запущен каждый поток репликации. Эта переменная по умолчанию установлена в 2. Чтобы отключить её, установите значение 0. Сервер регистрирует сообщения об операторах, которые небезопасны для ведения журнала на основе операторов, если значение больше 0. Прерванные соединения и ошибки отказа в доступе для новых попыток подключения регистрируются, если значение больше 1. См. Раздел B.3.2.9, «Ошибки связи и прерванные соединения».
ПримечаниеДействие этого параметра не ограничивается репликацией. Он влияет на диагностические сообщения по всему спектру действий сервера.
-
Формат командной строки --master-info-file=file_nameТип Имя файла Значение по умолчанию master.infoИмя, используемое для файла, в котором реплика записывает информацию об источнике. Имя по умолчанию —
master.infoв каталоге данных. Для получения информации о формате этого файла см. Раздел 16.2.4.2, «Репозитории метаданных репликации». -
Формат командной строки --master-retry-count=#Устарело Да Тип Целое число Значение по умолчанию 86400Минимальное значение 0Максимальное значение (64-разрядные платформы) 18446744073709551615Максимальное значение (32-разрядные платформы) 4294967295Количество попыток реплики переподключиться к источнику, прежде чем сдаться. Значение по умолчанию — 86400 раз. Значение 0 означает «бесконечность», и реплика пытается подключаться вечно. Попытки переподключения запускаются, когда реплика достигает времени ожидания соединения (указанного системной переменной
slave_net_timeout), не получая данных или сигнала синхронизации от источника. Попытка переподключения предпринимается через интервалы, установленные параметромMASTER_CONNECT_RETRYинструкцииCHANGE MASTER TO(по умолчанию каждые 60 секунд).Этот параметр устарел; ожидается, что он будет удален в будущей версии MySQL. Используйте вместо этого параметр
MASTER_RETRY_COUNTинструкцииCHANGE MASTER TO. -
Формат командной строки --max-relay-log-size=#Системная переменная max_relay_log_sizeОбласть действия Глобальная Динамическая Да Тип Целое число Значение по умолчанию 0Минимальное значение 0Максимальное значение 1073741824Единица измерения байты Размер блока 4096Размер, при котором сервер автоматически поворачивает файлы журнала ретрансляции. Если это значение отлично от нуля, журнал ретрансляции автоматически поворачивается, когда его размер превышает это значение. Если это значение равно нулю (по умолчанию), размер, при котором происходит поворот журнала ретрансляции, определяется значением
max_binlog_size. Для получения дополнительной информации см. Раздел 16.2.4.1, «Журнал ретрансляции». -
Формат командной строки --relay-log-purge[={OFF|ON}]Системная переменная relay_log_purgeОбласть действия Глобальная Динамическая Да Тип Логическое Значение по умолчанию ONОтключить или включить автоматическую очистку журналов ретрансляции, как только они больше не нужны. Значение по умолчанию — 1 (включено). Это глобальная переменная, которая может быть динамически изменена с помощью
SET GLOBAL relay_log_purge =. Отключение очистки журналов ретрансляции при включении параметраN--relay-log-recoveryставит под угрозу согласованность данных. -
Формат командной строки --relay-log-space-limit=#Системная переменная relay_log_space_limitОбласть действия Глобальная Динамическая Нет Тип Целое число Значение по умолчанию 0Минимальное значение 0Максимальное значение 18446744073709551615Единица измерения байты Этот параметр устанавливает верхний предел общего размера в байтах всех журналов ретрансляции на реплике. Значение 0 означает «без ограничения». Это полезно для хоста сервера-реплики с ограниченным дисковым пространством. Когда достигается предел, поток ввода-вывода репликации прекращает чтение событий бинарного журнала из источника, пока поток SQL репликации не догонит и не удалит некоторые неиспользуемые журналы ретрансляции. Обратите внимание, что этот предел не является абсолютным: есть случаи, когда потоку SQL требуется больше событий, прежде чем он сможет удалить журналы ретрансляции. В этом случае поток ввода-вывода превышает лимит, пока потоку SQL не станет возможным удалить некоторые журналы ретрансляции, поскольку без этого возникнет взаимоблокировка. Не следует устанавливать
--relay-log-space-limitв значение меньше, чем вдвое больше значения--max-relay-log-size(или--max-binlog-size, если--max-relay-log-sizeравно 0). В этом случае есть вероятность, что поток ввода-вывода будет ожидать освобождения места, поскольку--relay-log-space-limitпревышен, но у потока SQL нет журнала ретрансляции для очистки, и он не может удовлетворить поток ввода-вывода. Это заставляет поток ввода-вывода временно игнорировать--relay-log-space-limit.
-
Командная строка --replicate-do-db=nameТип Строка Создаёт фильтр репликации, используя имя базы данных. Такие фильтры также можно создать с помощью
CHANGE REPLICATION FILTER REPLICATE_DO_DB. Точный эффект этого фильтра зависит от того, используется ли репликация на основе операторов или на основе строк, и описан в следующих нескольких абзацах.ВажноФильтры репликации не могут использоваться на экземпляре сервера MySQL, настроенном для Group Replication, потому что фильтрация транзакций на некоторых серверах сделает группу неспособной достичь соглашения об согласованном состоянии.
Репликация на основе операторов. Указывает реплицирующей SQL-потоковой нити ограничить репликацию операторами, где базой данных по умолчанию (то есть той, которая выбрана с помощью
USE) являетсяdb_name. Для указания более одной базы данных используйте этот параметр несколько раз, один раз для каждой базы данных; однако, при этом не происходит репликации межбазовых операторов, таких какUPDATE, в то время, когда выбрана другая база данных (или никакая).some_db.some_tableSET foo='bar'ПредупреждениеДля указания нескольких баз данных необходимо использовать несколько экземпляров этого параметра. Поскольку имена баз данных могут содержать запятые, если вы предоставите список, разделённый запятыми, то этот список будет обрабатываться как имя одной базы данных.
Пример того, что не работает так, как ожидается, при использовании репликации на основе операторов: Если реплика запущена с
--replicate-do-db=sales, и вы выполняете следующие операторы на источнике, операторUPDATEне реплицируется:USE prices; UPDATE sales.january SET amount=amount+1000;
Основная причина такого поведения “проверять только базу данных по умолчанию” заключается в том, что по одному оператору трудно определить, следует ли его реплицировать (например, если вы используете операторы
DELETEилиUPDATEдля нескольких таблиц, которые действуют на нескольких базах данных). Также быстрее проверять только базу данных по умолчанию, а не все базы данных, если это не требуется.Репликация на основе строк. Указывает реплицирующей SQL-потоковой нити ограничить репликацию базой данных
db_name. Изменяются только таблицы, принадлежащие кdb_name; текущая база данных на это не влияет. Предположим, что реплика запущена с--replicate-do-db=sales, и действует репликация на основе строк, а затем на источнике выполняются следующие операторы:USE prices; UPDATE sales.february SET amount=amount+100;
Таблица
februaryв базе данныхsalesна реплике изменяется в соответствии с операторомUPDATE; это происходит независимо от того, был ли выдан операторUSE. Однако, выполнение следующих операторов на источнике не оказывает никакого эффекта на реплику при использовании репликации на основе строк и--replicate-do-db=sales:USE prices; UPDATE prices.march SET amount=amount-25;
Даже если оператор
USE pricesбыл изменён наUSE sales, эффекты оператораUPDATEпо-прежнему не будут реплицированы.Ещё одно важное различие в том, как
--replicate-do-dbобрабатывается при репликации на основе операторов по сравнению с репликацией на основе строк, происходит в отношении операторов, которые ссылаются на несколько баз данных. Предположим, что реплика запущена с--replicate-do-db=db1, и на источнике выполняются следующие операторы:USE db1; UPDATE db1.table1, db2.table2 SET db1.table1.col1 = 10, db2.table2.col2 = 20;
Если используется репликация на основе операторов, то обе таблицы обновляются на реплике. Однако при использовании репликации на основе строк изменяется только
table1на реплике; посколькуtable2находится в другой базе данных,table2на реплике не изменяется операторомUPDATE. Теперь предположим, что вместо оператораUSE db1был использован операторUSE db4:USE db4; UPDATE db1.table1, db2.table2 SET db1.table1.col1 = 10, db2.table2.col2 = 20;
В этом случае оператор
UPDATEне оказывает никакого влияния на реплику при использовании репликации на основе операторов. Однако если используется репликация на основе строк, операторUPDATEизменитtable1на реплике, но неtable2— другими словами, изменяются только таблицы в базе данных, имя которой указано с помощью--replicate-do-db, и выбор базы данных по умолчанию на это не влияет.Если вам необходимо, чтобы межбазовые обновления работали, используйте
--replicate-wild-do-table=вместо этого. См. Раздел 16.2.5, «Как сервера оценивают правила фильтрации репликации».db_name.%ПримечаниеЭтот параметр влияет на репликацию так же, как
--binlog-do-dbвлияет на двоичный протокол логов, и влияние формата репликации на то, как--replicate-do-dbвлияет на поведение репликации, такое же, как влияние формата логов на поведение--binlog-do-db.Этот параметр не влияет на операторы
BEGIN,COMMITилиROLLBACK.
-
Формат командной строки --replicate-ignore-db=nameТип Строка Создаёт фильтр репликации, используя имя базы данных. Такие фильтры также можно создавать с помощью
CHANGE REPLICATION FILTER REPLICATE_IGNORE_DB. Как и в случае с--replicate-do-db, точный эффект этого фильтра зависит от того, используется ли репликация на основе инструкций или на основе строк, и описывается в следующих нескольких абзацах.ВажноФильтры репликации нельзя использовать в экземпляре сервера MySQL, настроенном для групповой репликации, так как фильтрация транзакций на некоторых серверах может привести к невозможности достижения группой соглашения о согласованном состоянии.
Репликация на основе инструкций. Запрещает реплицировать инструкции, где базой данных по умолчанию (то есть, выбранной с помощью
USE) являетсяdb_name.Репликация на основе строк. Запрещает обновление таблиц в базе данных
db_name. База данных по умолчанию не имеет значения.При использовании репликации на основе инструкций следующий пример не работает так, как ожидается. Предположим, что реплика запущена с
--replicate-ignore-db=sales, и на источнике выполняются следующие инструкции:USE prices; UPDATE sales.january SET amount=amount+1000;
Инструкция
UPDATEв этом случае реплицируется, поскольку--replicate-ignore-dbприменяется только к базе данных по умолчанию (определяемой инструкциейUSE). Поскольку база данныхsalesбыла явно указана в инструкции, инструкция не была отфильтрована. Однако при использовании репликации на основе строк эффекты инструкцииUPDATEне передаются реплике, и копия таблицыsales.januaryв реплике остаётся неизменной; в этом случае--replicate-ignore-db=salesприводит к полному игнорированию репликой всех изменений, внесённых в таблицы базы данныхsalesна источнике.Для указания более одной базы данных для игнорирования, используйте этот параметр несколько раз, по одному для каждой базы данных. Поскольку имена баз данных могут содержать запятые, при вводе списка через запятые, список обрабатывается как имя одной базы данных.
Не следует использовать этот параметр, если вы используете обновления между базами данных и не хотите, чтобы эти обновления реплицировались. См. Раздел 16.2.5, «Как серверы оценивают правила фильтрации репликации».
Если вам необходимо, чтобы межбазовые обновления работали, используйте
--replicate-wild-ignore-table=вместо этого. См. Раздел 16.2.5, «Как серверы оценивают правила фильтрации репликации».db_name.%ПримечаниеЭтот параметр влияет на репликацию аналогично тому, как
--binlog-ignore-dbвлияет на логирование двоичных файлов, и влияние формата репликации на то, как--replicate-ignore-dbвлияет на поведение репликации, аналогично влиянию формата логирования на поведение--binlog-ignore-db.Этот параметр не влияет на инструкции
BEGIN,COMMITилиROLLBACK. -
--replicate-do-table=db_name.tbl_nameФормат командной строки --replicate-do-table=nameТип Строка Создаёт фильтр репликации, ограничивая репликацию заданной таблицей. Для указания более одной таблицы используйте этот параметр несколько раз, по одному для каждой таблицы. Это работает как для межбазовых, так и для обновлений в базе данных по умолчанию, в отличие от
--replicate-do-db. См. Раздел 16.2.5, «Как серверы оценивают правила фильтрации репликации». Вы также можете создать такой фильтр, выполнив инструкциюCHANGE REPLICATION FILTER REPLICATE_DO_TABLE.ВажноФильтры репликации нельзя использовать в экземпляре сервера MySQL, настроенном для групповой репликации, так как фильтрация транзакций на некоторых серверах может привести к невозможности достижения группой соглашения о согласованном состоянии.
Этот параметр влияет только на инструкции, относящиеся к таблицам. Он не влияет на инструкции, относящиеся только к другим объектам базы данных, таким как хранимые процедуры. Для фильтрации инструкций, работающих с хранимыми процедурами, используйте один или несколько параметров
--replicate-*-db. -
--replicate-ignore-table=db_name.tbl_nameФормат командной строки --replicate-ignore-table=nameТип Строка Создаёт фильтр репликации, запрещающий репликацию инструкций, обновляющих указанную таблицу, даже если та же инструкция может обновлять и другие таблицы. Для указания более одной таблицы для игнорирования используйте этот параметр несколько раз, по одному для каждой таблицы. Это работает для межбазовых обновлений, в отличие от
--replicate-ignore-db. См. Раздел 16.2.5, «Как серверы оценивают правила фильтрации репликации». Вы также можете создать такой фильтр, выполнив инструкциюCHANGE REPLICATION FILTER REPLICATE_IGNORE_TABLE.ПримечаниеФильтры репликации нельзя использовать в экземпляре сервера MySQL, настроенном для групповой репликации, так как фильтрация транзакций на некоторых серверах может привести к невозможности достижения группой соглашения о согласованном состоянии.
Этот параметр влияет только на инструкции, относящиеся к таблицам. Он не влияет на инструкции, относящиеся только к другим объектам базы данных, таким как хранимые процедуры. Для фильтрации инструкций, работающих с хранимыми процедурами, используйте один или несколько параметров
--replicate-*-db.
-
--replicate-rewrite-db=from_name->to_nameФормат командной строки --replicate-rewrite-db=old_name->new_nameТип Строка Указывает реплике создать фильтр репликации, который преобразует указанную базу данных в
to_name, если она былаfrom_nameна источнике. Затрагиваются только операторы, связанные с таблицами, а не операторы, такие какCREATE DATABASE,DROP DATABASEиALTER DATABASE.Для указания нескольких преобразований используйте этот параметр несколько раз. Сервер использует первый с
from_nameзначением, которое соответствует. Преобразование имени базы данных выполняется перед проверкой правил--replicate-*. Вы также можете создать такой фильтр, выполнив операторCHANGE REPLICATION FILTER REPLICATE_REWRITE_DB.Если вы используете опцию
--replicate-rewrite-dbв командной строке, а символ>является специальным для вашего интерпретатора команд, укажите значение параметра в кавычках. Например:$>
mysqld --replicate-rewrite-db="olddb->newdb"Эффект параметра
--replicate-rewrite-dbотличается в зависимости от того, используется ли для запроса формат двоичного протокола на основе операторов или на основе строк. При использовании формата на основе операторов операторы DML переводятся на основе текущей базы данных, как указано операторомUSE. При использовании формата на основе строк операторы DML переводятся на основе базы данных, в которой существует изменённая таблица. Операторы DDL всегда фильтруются на основе текущей базы данных, как указано операторомUSE, независимо от формата двоичного протокола.Чтобы гарантировать, что переименование даст ожидаемый результат, особенно в сочетании с другими параметрами фильтрации репликации, следуйте этим рекомендациям при использовании параметра
--replicate-rewrite-db:Создайте базы данных
from_nameиto_nameвручную на источнике и реплике с разными именами.Если вы используете формат двоичного протокола на основе операторов или смешанный, не используйте межбазовых запросов и не указывайте имена баз данных в запросах. Для операторов DDL и DML полагайтесь на оператор
USEдля указания текущей базы данных и используйте только имя таблицы в запросах.Если вы используете формат двоичного протокола на основе строк исключительно, для операторов DDL полагайтесь на оператор
USEдля указания текущей базы данных и используйте только имя таблицы в запросах. Для операторов DML вы можете использовать полное имя таблицы (db.table), если хотите.
Если эти рекомендации соблюдены, использование параметра
--replicate-rewrite-dbв сочетании с параметрами фильтрации репликации на уровне таблиц, такими как--replicate-do-table, безопасно.ПримечаниеГлобальные фильтры репликации не могут использоваться на экземпляре MySQL, настроенном для Group Replication, поскольку фильтрация транзакций на некоторых серверах сделает группу неспособной к согласованию состояний.
-
Формат командной строки --replicate-same-server-id[={OFF|ON}]Тип Булево Значение по умолчанию OFFИспользуется на серверах-репликах. Обычно следует использовать значение по умолчанию 0, чтобы предотвратить бесконечные циклы, вызванные циклической репликацией. Если установлено 1, реплика не пропускает события, имеющие собственный идентификатор сервера. Обычно это полезно только в редких конфигурациях. Не может быть установлено в 1, если включен
log_slave_updates. По умолчанию поток ввода-вывода репликации не записывает события журнала двоичных логов в журнал реле, если у них есть идентификатор сервера реплики (эта оптимизация помогает экономить место на диске). Если вы хотите использовать--replicate-same-server-id, убедитесь, что вы запустили реплику с этим параметром, прежде чем вы сделаете реплику прочитать свои собственные события, которые вы хотите, чтобы поток репликации SQL выполнил. -
--replicate-wild-do-table=db_name.tbl_nameФормат командной строки --replicate-wild-do-table=nameТип Строка Создает фильтр репликации, сообщая потоку SQL репликации о необходимости ограничить репликацию операторами, где любые обновлённые таблицы соответствуют указанным шаблонам имени базы данных и таблицы. Шаблоны могут содержать символы подстановки
%и_, которые имеют то же значение, что и для оператора соответствия шаблонамLIKE. Чтобы указать более одной таблицы, используйте этот параметр несколько раз, по одному для каждой таблицы. Это работает для межбазовых обновлений. См. Раздел 16.2.5, “Как серверы оценивают правила фильтрации репликации”. Вы также можете создать такой фильтр, выполнив операторCHANGE REPLICATION FILTER REPLICATE_WILD_DO_TABLE.ПримечаниеФильтры репликации не могут использоваться на экземпляре MySQL, настроенном для Group Replication, поскольку фильтрация транзакций на некоторых серверах сделает группу неспособной к согласованию состояний.
Этот параметр применяется к таблицам, представлениям и триггерам. Он не применяется к хранимым процедурам и функциям, или событиям. Чтобы отфильтровать операторы, работающие с этими объектами, используйте один или несколько параметров
--replicate-*-db.Например,
--replicate-wild-do-table=foo%.bar%реплицирует только обновления, использующие таблицу, где имя базы данных начинается сfoo, а имя таблицы начинается сbar.Если шаблон имени таблицы
%, он соответствует любому имени таблицы, и параметр также применяется к операторам на уровне базы данных (CREATE DATABASE,DROP DATABASEиALTER DATABASE). Например, если вы используете--replicate-wild-do-table=foo%.%, операторы на уровне базы данных реплицируются, если имя базы данных соответствует шаблонуfoo%.ВажноФильтры репликации на уровне таблиц применяются только к таблицам, которые явно упоминаются и используются в запросе. Они не применяются к таблицам, которые неявно обновляются запросом. Например, оператор
GRANT, который обновляет системную таблицуmysql.user, но не упоминает эту таблицу, не затрагивается фильтром, который указываетmysql.%в качестве шаблона подстановки.Чтобы включить символы подстановки в шаблоны имени базы данных или имени таблицы, экранируйте их обратной косой чертой. Например, чтобы реплицировать все таблицы базы данных, которая называется
my_own%db, но не реплицировать таблицы из базы данныхmy1ownAABCdb, вы должны экранировать символы_и%следующим образом:--replicate-wild-do-table=my\_own\%db. Если вы используете параметр в командной строке, вам может потребоваться удвоить обратные косые черты или поместить значение параметра в кавычки, в зависимости от вашего интерпретатора команд. Например, с оболочкой bash вам необходимо ввести--replicate-wild-do-table=my\\_own\\%db.
-
--replicate-wild-ignore-table=db_name.tbl_nameФормат командной строки --replicate-wild-ignore-table=nameТип Строка Создаёт фильтр репликации, который предотвращает репликацию SQL-потоком репликации оператора, в котором любая таблица соответствует заданному шаблону с подстановкой. Чтобы игнорировать более одной таблицы, используйте этот параметр несколько раз, по одному для каждой таблицы. Это работает для межбазовых обновлений. См. Раздел 16.2.5, «Как серверы оценивают правила фильтрации репликации». Вы также можете создать такой фильтр, выполнив оператор
CHANGE REPLICATION FILTER REPLICATE_WILD_IGNORE_TABLE.ВажноФильтры репликации не могут быть использованы на экземпляре сервера MySQL, настроенном для репликации группы, поскольку фильтрация транзакций на некоторых серверах сделает группу неспособной достичь соглашения о согласованном состоянии.
Например,
--replicate-wild-ignore-table=foo%.bar%не реплицирует обновления, использующие таблицу, где имя базы данных начинается сfoo, а имя таблицы начинается сbar.Сведения о том, как происходит сопоставление, см. в описании параметра
--replicate-wild-do-table. Правила включения символов подстановки в значение параметра такие же, как и для--replicate-wild-ignore-table.ВажноФильтры репликации на уровне таблиц применяются только к таблицам, которые явно упоминаются и к которым обращаются в запросе. Они не применяются к таблицам, которые неявно обновляются запросом. Например, оператор
GRANT, который обновляет системную таблицуmysql.user, но не упоминает эту таблицу, не затрагивается фильтром, который указываетmysql.%как шаблон подстановки.Если необходимо отфильтровать операторы
GRANTили другие административные операторы, можно использовать фильтр--replicate-ignore-db. Этот фильтр работает с текущей базой данных по умолчанию, которая определяется операторомUSE. Таким образом, можно создать фильтр для игнорирования операторов для базы данных, которая не реплицируется, а затем выполнить операторUSE, чтобы немедленно переключить базу данных по умолчанию на эту базу перед выполнением любых административных операторов, которые требуется игнорировать. В административном операторе укажите фактическую базу данных, к которой применяется оператор.Например, если
--replicate-ignore-db=nonreplicatedнастроен на сервере реплики, следующая последовательность операторов приводит к игнорированию оператораGRANT, так как в качестве базы данных по умолчанию используетсяnonreplicated:USE nonreplicated; GRANT SELECT, INSERT ON replicated.t1 TO 'someuser'@'somehost';
-
Формат командной строки --skip-slave-start[={OFF|ON}]Системная переменная skip_slave_startОбласть действия Глобальная Динамическая Нет Тип Булево Значение по умолчанию OFFУказывает реплицирующему серверу не запускать потоки репликации при запуске сервера. Чтобы запустить потоки позже, используйте оператор
START SLAVE. -
--slave-skip-errors=[err_code1,err_code2,...|all|ddl_exist_errors]Формат командной строки --slave-skip-errors=nameСистемная переменная slave_skip_errorsОбласть действия Глобальная Динамическая Нет Тип Строка Значение по умолчанию OFFДопустимые значения OFF[list of error codes]allddl_exist_errorsОбычно репликация останавливается при возникновении ошибки на реплике, что даёт вам возможность вручную устранить несоответствие в данных. Этот параметр заставляет поток репликации SQL продолжить репликацию, когда оператор возвращает любую из перечисленных ошибок.
Не используйте этот параметр, если вы полностью не понимаете, почему возникают ошибки. Если в вашей настройке репликации, клиентских программах и самом MySQL нет ошибок, ошибка, останавливающая репликацию, никогда не должна возникнуть. Необоснованное использование этого параметра приводит к тому, что реплики становятся совершенно не синхронизированными с исходником, и вам неизвестно, почему это произошло.
Для кодов ошибок следует использовать числа, предоставленные в сообщении об ошибке в журнале ошибок реплики и в выводе оператора
SHOW SLAVE STATUS. Приложение B, Сообщения об ошибках и распространённые проблемы, содержит список кодов ошибок сервера.Краткое значение
ddl_exist_errorsэквивалентно списку кодов ошибок1007,1008,1050,1051,1054,1060,1061,1068,1094,1146.Вы также можете (но не должны) использовать очень не рекомендуемое значение
all, чтобы заставить реплику игнорировать все сообщения об ошибках и продолжать работу независимо от происходящего. Само собой разумеется, если вы используетеall, нет никаких гарантий целостности ваших данных. В этом случае не жалуйтесь (и не подавайте сообщения об ошибках), если данные реплики не совпадают с данными исходника. Вы предупреждены.Этот параметр работает не так при репликации между NDB-кластерами из-за внутреннего механизма
NDBпроверки последовательности номеров эпохи; как толькоNDBобнаруживает номер эпохи, отсутствующий или не в порядке, он немедленно останавливает поток приложения реплики.Примеры:
--slave-skip-errors=1062,1053 --slave-skip-errors=all --slave-skip-errors=ddl_exist_errors
-
--slave-sql-verify-checksum={0|1}Формат командной строки --slave-sql-verify-checksum[={OFF|ON}]Тип Булево Значение по умолчанию ONПри включении этого параметра реплика проверяет контрольные суммы, считанные из журнала репликации. В случае несоответствия реплика останавливается с ошибкой.
Следующие параметры используются внутренней системой тестирования MySQL для тестирования и отладки репликации. Они не предназначены для использования в рабочей среде.
-
Формат командной строки --abort-slave-event-count=#Тип Целое число Значение по умолчанию 0Минимальное значение 0Когда этот параметр устанавливается в некоторое положительное целое число
value, отличное от 0 (значение по умолчанию), он влияет на поведение репликации следующим образом: после запуска потока репликации SQL разрешается выполнитьvalueсобытий журнала; после этого поток репликации SQL больше не получает событий, как если бы сетевое соединение с исходником было разорвано. Поток репликации SQL продолжает работать, а вывод изSHOW SLAVE STATUSотображаетYesкак в колонкеSlave_IO_Running, так и в колонкеSlave_SQL_Running, но дальнейшие события из журнала репликации не считываются.Этот параметр используется внутренней системой тестирования MySQL для тестирования и отладки репликации. Он не предназначен для использования в рабочей среде.
-
--disconnect-slave-event-countФормат командной строки --disconnect-slave-event-count=#Тип Целое число Значение по умолчанию 0Этот параметр используется внутренней системой тестирования MySQL для тестирования и отладки репликации. Он не предназначен для использования в рабочей среде.
Параметры для записи состояния репликации в таблицы
MySQL 5.7 поддерживает запись метаданных репликации в таблицы вместо файлов. Запись метаданных репозитория подключения реплики и репозитория метаданных применителя можно настроить отдельно, используя следующие системные переменные:
Дополнительную информацию об этих переменных можно найти в разделе 16.1.6.3, «Параметры и переменные сервера реплики».
Эти переменные можно использовать для повышения устойчивости реплики к непредвиденным остановкам. Дополнительная информация приведена в разделе 16.3.2, «Обработка непредвиденной остановки реплики».
Таблицы журнала информации и их содержимое считаются локальными для данного MySQL сервера. Они не реплицируются, и изменения в них не записываются в бинарный журнал.
Дополнительную информацию можно найти в разделе 16.2.4, «Журнал реле и репозитории метаданных репликации».
Системные переменные, используемые на репликах
В этом списке описаны системные переменные для управления серверами реплик. Их можно задать при запуске сервера, и некоторые из них можно изменить во время работы, используя SET. Параметры сервера, используемые с репликами, перечислены ранее в этом разделе.
-
Формат командной строки --init-slave=nameСистемная переменная init_slaveОбласть действия Глобальная Динамическая Да Тип Строка Эта переменная похожа на
init_connect, но представляет собой строку, которая выполняется сервером реплики каждый раз при запуске потока SQL репликации. Формат строки такой же, как у переменнойinit_connect. Настройка этой переменной вступает в силу для последующих инструкцийSTART SLAVE.ПримечаниеПоток SQL репликации отправляет подтверждение клиенту перед выполнением
init_slave. Поэтому нет гарантии, чтоinit_slaveбудет выполнено, когдаSTART SLAVEвозвращает результат. Более подробная информация представлена в Разделе 13.4.2.5, «Оператор START SLAVE». -
Формат командной строки --log-slow-slave-statements[={OFF|ON}]Системная переменная log_slow_slave_statementsОбласть действия Глобальная Динамическая Да Тип Булево Значение по умолчанию OFFПри включенном журнале медленных запросов эта переменная включает протоколирование запросов, выполнение которых заняло более
long_query_timeсекунд на реплике. Обратите внимание, что если используется репликация на основе строк (binlog_format=ROW),log_slow_slave_statementsне имеет эффекта. Запросы добавляются в журнал медленных запросов реплики только в том случае, если они протоколированы в формате запросов в бинарном журнале, то есть при установкеbinlog_format=STATEMENTили при установкеbinlog_format=MIXEDи запросы протоколированы в формате запросов. Медленные запросы, которые протоколированы в формате строк при установкеbinlog_format=MIXEDили протоколированы при установкеbinlog_format=ROW, не добавляются в журнал медленных запросов реплики, даже еслиlog_slow_slave_statementsвключен.Установка
log_slow_slave_statementsне имеет немедленного эффекта. Состояние переменной применяется ко всем последующим операциямSTART SLAVE. Кроме того, глобальная настройкаlong_query_timeдействует в течение всего срока службы потока SQL. Если вы измените это значение, вам необходимо остановить и перезапустить поток репликации SQL, чтобы применить изменения (например, выпустив инструкцииSTOP SLAVEиSTART SLAVEс опциейSQL_THREAD). -
Формат командной строки --master-info-repository={FILE|TABLE}Системная переменная master_info_repositoryОбласть действия Глобальная Динамическая Да Тип Строка Значение по умолчанию FILEДопустимые значения FILETABLEНастройка этой переменной определяет, записывает ли реплика метаданные о источнике, состоящие из статуса и информации о подключении, в таблицу
InnoDBв базе данныхmysqlили в виде файла в каталоге данных. Дополнительную информацию о репозитории метаданных подключения см. в Разделе 16.2.4, «Журналы релеев и репозитории метаданных репликации».Значение по умолчанию —
FILE. В качестве файла репозиторий метаданных подключения реплики по умолчанию имеет имяmaster.info. Вы можете изменить это имя, используя опцию--master-info-file.Альтернативное значение —
TABLE. В качестве таблицыInnoDBрепозиторий метаданных подключения реплики имеет имяmysql.slave_master_info. НастройкаTABLEнеобходима при конфигурировании нескольких каналов репликации.Эта переменная должна быть установлена в
TABLEперед настройкой нескольких каналов репликации. Если вы используете несколько каналов репликации, вы не можете вернуть значение кFILE.Настройка расположения репозитория метаданных подключения напрямую влияет на действие системной переменной
sync_master_info. Вы можете изменить настройку только тогда, когда потоки репликации не выполняются. -
Формат командной строки --max-relay-log-size=#Системная переменная max_relay_log_sizeОбласть действия Глобальная Динамическая Да Тип Целое число Значение по умолчанию 0Минимальное значение 0Максимальное значение 1073741824Единица измерения байты Размер блока 4096Если запись репликой в свой журнал релеев приводит к превышению размера текущего файла журнала, реплика вращает журналы релеев (закрывает текущий файл и открывает следующий). Если
max_relay_log_sizeравно 0, сервер используетmax_binlog_sizeкак для бинарного журнала, так и для журнала релеев. Еслиmax_relay_log_sizeбольше 0, она ограничивает размер журнала релеев, что позволяет иметь разные размеры для двух журналов. Вы должны установитьmax_relay_log_sizeв диапазон от 4096 байтов до 1 ГБ (включительно) или 0. Значение по умолчанию — 0. См. Раздел 16.2.3, «Потоки репликации».
-
Формат командной строки --relay-log=file_nameСистемная переменная relay_logОбласть видимости Глобальная Динамическая Нет Тип Имя файла Базовое имя для файлов релейного журнала. Для канала репликации по умолчанию базовым именем для релейных журналов является
. Для каналов репликации, отличных от канала по умолчанию, базовым именем для релейных журналов являетсяhost_name-relay-bin, гдеhost_name-relay-bin-channelchannel— это имя канала репликации, записанного в этом релейном журнале.Сервер записывает файл в каталог данных, если только базовое имя не задано с абсолютным именем пути в начале, чтобы указать другой каталог. Сервер создает файлы релейного журнала последовательно, добавляя числовой суффикс к базовому имени.
Из-за способа, которым MySQL разбирает параметры сервера, если вы указываете эту переменную при запуске сервера, вы должны указать значение; базовое имя по умолчанию используется только в том случае, если параметр фактически не указан. Если вы указываете системную переменную
relay_logпри запуске сервера без указания значения, скорее всего, произойдет непредвиденное поведение; это поведение зависит от используемых других параметров, порядка их указания и того, указаны ли они в командной строке или в файле параметров. Для получения дополнительной информации о том, как MySQL обрабатывает параметры сервера, см. Раздел 4.2.2, «Указание параметров программы».Если вы указываете эту переменную, указанное значение также используется в качестве базового имени для файла индекса релейного журнала. Вы можете переопределить это поведение, указав другое базовое имя файла индекса релейного журнала с помощью системной переменной
relay_log_index.Когда сервер считывает запись из файла индекса, он проверяет, содержит ли запись относительный путь. Если это так, относительная часть пути заменяется абсолютным путем, установленным с помощью системной переменной
relay_log. Абсолютный путь остается без изменений; в этом случае индекс необходимо отредактировать вручную, чтобы можно было использовать новый путь или пути.Системная переменная
relay_logможет быть полезна при выполнении следующих задач:Создание релейных журналов, имена которых не зависят от имен хостов.
Если вам нужно поместить релейные журналы в какую-либо область, отличную от каталога данных, потому что ваши релейные журналы имеют тенденцию быть очень большими, и вы не хотите уменьшать
max_relay_log_size.Для повышения скорости за счет использования балансировки нагрузки между дисками.
Вы можете получить имя файла (и путь) релейного журнала из системной переменной
relay_log_basename. -
Системная переменная relay_log_basenameОбласть видимости Глобальная Динамическая Нет Тип Имя файла Значение по умолчанию datadir + '/' + hostname + '-relay-bin'Содержит базовое имя и полный путь к файлу релейного журнала. Максимальная длина переменной составляет 256. Эта переменная устанавливается сервером и доступна только для чтения.
-
Формат командной строки --relay-log-index=file_nameСистемная переменная relay_log_indexОбласть видимости Глобальная Динамическая Нет Тип Имя файла Значение по умолчанию *host_name*-relay-bin.indexИмя файла индекса релейного журнала. Максимальная длина переменной составляет 256. Для канала репликации по умолчанию имя по умолчанию —
. Для каналов репликации, отличных от канала по умолчанию, имя по умолчанию —host_name-relay-bin.index, гдеhost_name-relay-bin-channel.indexchannel— это имя канала репликации, записанного в этом индексе релейного журнала.Сервер записывает файл в каталог данных, если только имя не задано с абсолютным именем пути в начале, чтобы указать другой каталог. имя.
Из-за способа, которым MySQL разбирает параметры сервера, если вы указываете эту переменную при запуске сервера, вы должны указать значение; базовое имя по умолчанию используется только в том случае, если параметр фактически не указан. Если вы указываете системную переменную
relay_log_indexпри запуске сервера без указания значения, скорее всего, произойдет непредвиденное поведение; это поведение зависит от используемых других параметров, порядка их указания и того, указаны ли они в командной строке или в файле параметров. Для получения дополнительной информации о том, как MySQL обрабатывает параметры сервера, см. Раздел 4.2.2, «Указание параметров программы». -
Формат командной строки --relay-log-info-file=file_nameСистемная переменная relay_log_info_fileОбласть видимости Глобальная Динамическая Нет Тип Имя файла Значение по умолчанию relay-log.infoИмя файла, в котором реплика записывает информацию о релейных журналах, когда
relay_log_info_repository=FILE. Еслиrelay_log_info_repository=TABLE, это имя файла, которое будет использоваться в случае, если репозиторий будет изменен наFILE). Имя по умолчанию —relay-log.infoв каталоге данных. Для получения информации о репозитории метаданных приложения см. Раздел 16.2.4.2, «Репозитории метаданных репликации». -
Формат командной строки --relay-log-info-repository=valueСистемная переменная relay_log_info_repositoryОбласть видимости Глобальная Динамическая Да Тип Строка Значение по умолчанию FILEДопустимые значения FILETABLEНастройка этой переменной определяет, хранит ли сервер реплики свой репозиторий метаданных приложения в виде таблицы
InnoDBв системной базе данныхmysqlили в виде файла в каталоге данных. Для получения дополнительной информации о репозитории метаданных приложения см. Раздел 16.2.4, «Релейный журнал и репозитории метаданных репликации».Настройка по умолчанию —
FILE. В виде файла репозиторий метаданных приложения реплики по умолчанию называетсяrelay-log.info, и вы можете изменить это имя с помощью системной переменнойrelay_log_info_file.С настройкой
TABLE, как таблицаInnoDB, репозиторий метаданных приложения реплики называетсяmysql.slave_relay_log_info. НастройкаTABLEнеобходима при настройке нескольких каналов репликации. НастройкаTABLEдля репозитория метаданных приложения реплики также необходима для обеспечения отказоустойчивости репликации к неожиданным остановкам. См. Раздел 16.3.2, «Обработка неожиданной остановки реплики» для получения дополнительной информации.Эта переменная должна быть установлена в
TABLEперед настройкой нескольких каналов репликации. Если вы используете несколько каналов репликации, вы не можете вернуть значение кFILE.Настройка расположения репозитория метаданных приложения оказывает прямое влияние на эффект, производимый настройкой системной переменной
sync_relay_log_info. Вы можете изменить настройку только тогда, когда потоки репликации не выполняются. -
Формат командной строки --relay-log-purge[={OFF|ON}]Системная переменная relay_log_purgeОбласть видимости Глобальная Динамическая Да Тип Булево Значение по умолчанию ONОтключает или включает автоматическую очистку файлов релейного журнала, как только они больше не нужны. Значение по умолчанию — 1 (
ON).
-
Формат командной строки --relay-log-recovery[={OFF|ON}]Системная переменная relay_log_recoveryОбласть видимости Глобальная Динамическая Нет Тип Булево Значение по умолчанию OFFЕсли включена, эта переменная включает автоматическое восстановление журнала ретрансляции сразу после запуска сервера. Процесс восстановления создает новый файл журнала ретрансляции, инициализирует позицию потока SQL в этом новом журнале ретрансляции и инициализирует поток I/O в позицию потока SQL. Затем продолжается чтение журнала ретрансляции из источника.
Эта глобальная переменная является доступной только для чтения во время выполнения. Ее значение может быть установлено с помощью параметра
--relay-log-recoveryпри запуске сервера реплики, который следует использовать после неожиданного останова реплики, чтобы гарантировать, что не будут обрабатываться потенциально поврежденные журналы ретрансляции, и который необходимо использовать для обеспечения отказоустойчивой реплики. Значение по умолчанию равно 0 (отключено). Информацию о сочетании параметров на реплике, наиболее устойчивой к неожиданным остановкам, см. в разделе 16.3.2, «Обработка неожиданного останова реплики».Эта переменная также взаимодействует с переменной
relay_log_purge, которая управляет очисткой журналов, когда они больше не нужны. Включениеrelay_log_recovery, когдаrelay_log_purgeотключено, создает риск чтения журнала ретрансляции из файлов, которые не были очищены, что приводит к несоответствию данных.Для многопоточной реплики (где
slave_parallel_workersбольше 0), начиная с MySQL 5.7.13, установкаrelay_log_recovery = ONавтоматически обрабатывает любые несоответствия и пробелы в последовательности транзакций, которые были выполнены из журнала ретрансляции. Эти пробелы могут возникать при использовании репликации на основе позиции файла. (Для получения более подробной информации см. раздел 16.4.1.32, «Репликация и несоответствия транзакций».) Процесс восстановления журнала ретрансляции обрабатывает пробелы, используя тот же метод, что и операторSTART SLAVE UNTIL SQL_AFTER_MTS_GAPS. Когда реплика достигает согласованного состояния без пробелов, процесс восстановления журнала ретрансляции переходит к извлечению дальнейших транзакций из источника, начиная с позиции потока SQL репликации. В версиях MySQL до MySQL 5.7.13 этот процесс не был автоматическим и требовал запуска сервера сrelay_log_recovery=0, запуска реплики сSTART SLAVE UNTIL SQL_AFTER_MTS_GAPSдля исправления любых несоответствий транзакций, а затем перезапуска реплики сrelay_log_recovery=1. При использовании репликации на основе GTID, начиная с MySQL 5.7.28, многопоточная реплика сначала проверяет, установлено лиMASTER_AUTO_POSITIONвON, и если это так, пропускает шаг вычисления транзакций, которые следует пропустить или не пропускать, так что старые журналы ретрансляции не требуются для процесса восстановления.ПримечаниеЭта переменная не влияет на следующие каналы групповой репликации:
group_replication_appliergroup_replication_recovery
Любые другие каналы, работающие в группе, затронуты, например, канал, который реплицируется из внешнего источника или другой группы.
-
Формат командной строки --relay-log-space-limit=#Системная переменная relay_log_space_limitОбласть видимости Глобальная Динамическая Нет Тип Целое число Значение по умолчанию 0Минимальное значение 0Максимальное значение 18446744073709551615Единица измерения байты Максимальный объем пространства для использования всеми журналами ретрансляции.
-
replication_optimize_for_static_plugin_configФормат командной строки --replication-optimize-for-static-plugin-config[={OFF|ON}]Введена 5.7.33 Системная переменная replication_optimize_for_static_plugin_configОбласть видимости Глобальная Динамическая Да Тип Булево Значение по умолчанию OFFИспользуйте общие блокировки и избегайте ненужных приобретений блокировок для повышения производительности полусинхронной репликации. Пока эта системная переменная включена, плагин полусинхронной репликации не может быть удален, поэтому необходимо отключить системную переменную, прежде чем завершить удаление.
Эта системная переменная может быть включена до или после установки плагина полусинхронной репликации и может быть включена во время работы репликации. Серверы источников полусинхронной репликации также могут получить преимущества в производительности от включения этой системной переменной, поскольку они используют те же механизмы блокировки, что и реплики.
replication_optimize_for_static_plugin_configможет быть включена, когда на сервере используется групповая репликация. В этом случае это может повысить производительность при наличии конкуренции за блокировки из-за высоких нагрузок. -
replication_sender_observe_commit_onlyФормат командной строки --replication-sender-observe-commit-only[={OFF|ON}]Введена 5.7.33 Системная переменная replication_sender_observe_commit_onlyОбласть видимости Глобальная Динамическая Да Тип Булево Значение по умолчанию OFFОграничьте обратные вызовы для повышения производительности полусинхронной репликации. Эта системная переменная может быть включена до или после установки плагина полусинхронной репликации и может быть включена во время работы репликации. Серверы источников полусинхронной репликации также могут получить преимущества в производительности от включения этой системной переменной, поскольку они используют те же механизмы блокировки, что и реплики.
-
Формат командной строки --report-host=host_nameСистемная переменная report_hostОбласть видимости Глобальная Динамическая Нет Тип Строка Имя хоста или IP-адрес реплики, который будет сообщен источнику во время регистрации реплики. Это значение отображается в выводе
SHOW SLAVE HOSTSна сервере источника. Оставьте значение не установленным, если вы не хотите, чтобы реплика регистрировалась в источнике.ПримечаниеНедостаточно, чтобы источник просто считывал IP-адрес реплики из сокета TCP/IP после подключения реплики. Из-за NAT и других проблем маршрутизации этот IP-адрес может быть недействительным для подключения к реплике из источника или других хостов.
-
Формат командной строки --report-password=nameСистемная переменная report_passwordОбласть видимости Глобальная Динамическая Нет Тип Строка Пароль учетной записи пользователя репликации реплики, который будет сообщен источнику во время регистрации реплики. Это значение отображается в выводе
SHOW SLAVE HOSTSна сервере источника, если источник был запущен с--show-slave-auth-info.Хотя название этой переменной может указывать на обратное,
report_passwordне связана с системой привилегий пользователей MySQL и поэтому не обязательно (или даже, вероятно, не) совпадает с паролем для учетной записи пользователя репликации MySQL.
-
Формат командной строки --report-port=port_numСистемная переменная report_portОбласть действия Глобальная Динамическая Нет Тип Целое Значение по умолчанию [slave_port]Минимальное значение 0Максимальное значение 65535Номер порта TCP/IP для подключения к реплике, который должен быть сообщен источнику при регистрации реплики. Устанавливается только в том случае, если реплика прослушивает нестандартный порт или имеется специальный туннель от источника или других клиентов к реплике. Если вы не уверены, не используйте этот параметр.
Значение по умолчанию для этого параметра — номер порта, фактически используемый репликой. Это также значение по умолчанию, отображаемое в
SHOW SLAVE HOSTS. -
Формат командной строки --report-user=nameСистемная переменная report_userОбласть действия Глобальная Динамическая Нет Тип Строка Имя учетной записи пользователя реплики, которое должно быть сообщено источнику при регистрации реплики. Это значение отображается в выводе
SHOW SLAVE HOSTSна сервере источника, если источник был запущен с--show-slave-auth-info.Несмотря на то, что имя этой переменной может указывать на обратное,
report_userне связана с системой привилегий MySQL-пользователей и, следовательно, не обязательно (и даже маловероятно) совпадает с именем учетной записи пользователя MySQL для репликации. -
Формат командной строки --rpl-semi-sync-slave-enabled[={OFF|ON}]Системная переменная rpl_semi_sync_slave_enabledОбласть действия Глобальная Динамическая Да Тип Булево Значение по умолчанию OFFУправляет включением полусинхронной репликации на реплике. Для включения или отключения плагина установите эту переменную в
ONилиOFF(соответственно 1 или 0). Значение по умолчанию —OFF.Эта переменная доступна только в случае установки плагина полусинхронной репликации на стороне реплики.
-
rpl_semi_sync_slave_trace_levelФормат командной строки --rpl-semi-sync-slave-trace-level=#Системная переменная rpl_semi_sync_slave_trace_levelОбласть действия Глобальная Динамическая Да Тип Целое Значение по умолчанию 32Минимальное значение 0Максимальное значение 4294967295Уровень отладки трассировки полусинхронной репликации на реплике. Смотрите
rpl_semi_sync_master_trace_levelдля допустимых значений.Эта переменная доступна только в случае установки плагина полусинхронной репликации на стороне реплики.
-
Формат командной строки --rpl-stop-slave-timeout=#Системная переменная rpl_stop_slave_timeoutОбласть действия Глобальная Динамическая Да Тип Целое Значение по умолчанию 31536000Минимальное значение 2Максимальное значение 31536000Единица измерения секунды Вы можете контролировать время ожидания
STOP SLAVE(в секундах), задав эту переменную. Это может использоваться для предотвращения тупиковых ситуаций междуSTOP SLAVEи другими операторами SQL, использующими разные подключения клиентов к реплике.Максимальное и значение по умолчанию для
rpl_stop_slave_timeoutсоставляет 31536000 секунд (1 год). Минимальное — 2 секунды. Изменения в этой переменной вступают в силу для последующих командSTOP SLAVE.Эта переменная влияет только на клиента, который выполняет команду
STOP SLAVE. Когда таймаут истекает, клиент получает сообщение об ошибке, указывающее, что выполнение команды не завершено. Затем клиент прекращает ожидание остановки репликационных потоков, но репликационные потоки продолжают пытаться остановиться, а инструкцияSTOP SLAVEостается в силе. После того, как репликационные потоки больше не заняты, командаSTOP SLAVEвыполняется, и реплика останавливается. -
Формат командной строки --slave-checkpoint-group=#Системная переменная slave_checkpoint_groupОбласть действия Глобальная Динамическая Да Тип Целое Значение по умолчанию 512Минимальное значение 32Максимальное значение 524280Размер блока 8Устанавливает максимальное количество транзакций, которые может обработать многопоточная реплика, прежде чем будет вызвана операция создания контрольной точки для обновления её статуса, как показано в
SHOW SLAVE STATUS. Изменение этой переменной не влияет на реплики, для которых многопоточность не включена. Изменение этой переменной не имеет немедленного эффекта. Состояние переменной применяется ко всем последующим командамSTART SLAVE.ПримечаниеМногопоточные реплики в настоящее время не поддерживаются NDB Cluster, который безмолвно игнорирует установленное значение этой переменной. Смотрите Раздел 21.7.3, «Известные проблемы репликации в NDB Cluster» для получения дополнительной информации.
Эта переменная работает в сочетании с системной переменной
slave_checkpoint_periodтаким образом, что при превышении любого из этих пределов выполняется создание контрольной точки, а счётчики, отслеживающие количество транзакций и время, прошедшее с момента последней контрольной точки, сбрасываются.Минимальное разрешенное значение для этой переменной — 32, если сервер не был скомпилирован с помощью
-DWITH_DEBUG, в этом случае минимальное значение равно 1. Эффективное значение всегда кратно 8; вы можете установить значение, которое не кратно 8, но сервер округляет его вниз до ближайшего меньшего кратного 8 перед сохранением значения. (Исключение: такой округления не выполняет отладочный сервер.) Независимо от того, как был скомпилирован сервер, значение по умолчанию — 512, а максимальное разрешенное значение — 524280.
-
Формат командной строки --slave-checkpoint-period=#Системная переменная slave_checkpoint_periodОбласть действия Глобальная Динамическая Да Тип Целое Значение по умолчанию 300Минимальное значение 1Максимальное значение 4294967295Единица измерения миллисекунды Устанавливает максимальное время (в миллисекундах), которое может пройти до вызова операции контрольной точки для обновления статуса многопоточной реплики, как показано в
SHOW SLAVE STATUS. Установка этой переменной не оказывает влияния на реплики, для которых многопоточность не включена. Изменения этой переменной вступают в силу для всех каналов репликации немедленно, включая работающие каналы.ПримечаниеМногопоточные реплики в настоящее время не поддерживаются NDB Cluster, который игнорирует установленное значение для этой переменной. Дополнительную информацию см. в Разделе 21.7.3 «Известные проблемы репликации NDB Cluster».
Эта переменная работает в сочетании с системной переменной
slave_checkpoint_groupтаким образом, что при превышении любого из ограничений выполняется контрольная точка, и счетчики, отслеживающие количество транзакций и время, прошедшее с момента последней контрольной точки, сбрасываются.Минимальное допустимое значение для этой переменной равно 1, если сервер не был скомпилирован с помощью
-DWITH_DEBUG; в противном случае минимальное значение равно 0. Независимо от способа компиляции сервера, значение по умолчанию равно 300 миллисекундам, а максимальное возможное значение равно 4294967295 миллисекундам (приблизительно 49,7 дня). -
Формат командной строки --slave-compressed-protocol[={OFF|ON}]Системная переменная slave_compressed_protocolОбласть действия Глобальная Динамическая Да Тип Булево Значение по умолчанию OFFИспользуется ли сжатие протокола источник/реплика, если обе стороны его поддерживают. Если эта переменная отключена (что является значением по умолчанию), соединения не сжимаются. Изменения в этой переменной вступают в силу при последующих попытках подключения; это включает в себя после выполнения команды
START SLAVE, а также при повторных подключениях, выполняемых потоком репликации I/O (например, после установки параметраMASTER_RETRY_COUNTдля командыCHANGE MASTER TO). См. также Раздел 4.2.6 «Управление сжатием подключений». -
Формат командной строки --slave-exec-mode=modeСистемная переменная slave_exec_modeОбласть действия Глобальная Динамическая Да Тип Перечисление Значение по умолчанию IDEMPOTENT(NDB)STRICT(Другое)Допустимые значения STRICTIDEMPOTENTУправляет тем, как поток репликации разрешает конфликты и ошибки во время репликации. Режим
IDEMPOTENTприводит к подавлению ошибок дублирования ключей и отсутствия ключа;STRICTозначает, что такого подавления не происходит.Режим
IDEMPOTENTпредназначен для использования в репликации с несколькими источниками, циклической репликации и других специальных сценариях репликации для NDB Cluster Replication. (См. Раздел 21.7.10 «NDB Cluster Replication: Bidirectional and Circular Replication» и Раздел 21.7.11 «NDB Cluster Replication Conflict Resolution» для получения дополнительной информации). NDB Cluster игнорирует явное значение, установленное дляslave_exec_mode, и всегда обрабатывает его какIDEMPOTENT.В MySQL Server 5.7, режим
STRICTявляется значением по умолчанию.Для хранилищ данных, отличных от
NDB,IDEMPOTENTрежим следует использовать только в том случае, если вы абсолютно уверены, что ошибки дублирования ключей и ошибки отсутствия ключей можно безопасно игнорировать. Он предназначен для использования в сценариях аварийного переключения для NDB Cluster, где используется репликация с несколькими источниками или циклическая репликация, и не рекомендуется для использования в других случаях. -
Формат командной строки --slave-load-tmpdir=dir_nameСистемная переменная slave_load_tmpdirОбласть действия Глобальная Динамическая Нет Тип Имя каталога Значение по умолчанию Value of --tmpdirИмя каталога, в котором реплика создает временные файлы. Изменение этой переменной вступает в силу для всех каналов репликации немедленно, включая работающие каналы. Значение переменной по умолчанию равно значению системной переменной
tmpdirили значению по умолчанию, если эта системная переменная не указана.Когда поток репликации SQL реплицирует оператор
LOAD DATA, он извлекает файл, который необходимо загрузить, из журнала репликации в временные файлы, а затем загружает их в таблицу. Если загруженный на источнике файл большой, временные файлы на реплике также будут большими. Поэтому рекомендуется использовать этот параметр, чтобы указать реплике помещать временные файлы в каталог, расположенный в файловой системе с большим свободным местом. В этом случае журналы репликации также будут большими, поэтому вы можете установить системную переменнуюrelay_log, чтобы разместить журналы репликации в этой файловой системе.Каталог, указанный с помощью этого параметра, должен находиться в файловой системе на диске (не в файловой системе памяти), чтобы временные файлы, используемые для репликации операторов
LOAD DATA, сохранялись после перезагрузки машины. Каталог также не должен удаляться операционной системой во время процесса запуска системы. Тем не менее, репликация теперь может продолжаться после перезагрузки, если временные файлы были удалены. -
Формат командной строки --slave-max-allowed-packet=#Системная переменная slave_max_allowed_packetОбласть действия Глобальная Динамическая Да Тип Целое Значение по умолчанию 1073741824Минимальное значение 1024Максимальное значение 1073741824Единица измерения байты Размер блока 1024Эта переменная устанавливает максимальный размер пакета для потоков репликации SQL и I/O, чтобы большие обновления с использованием репликации на основе строк не приводили к сбою репликации из-за того, что обновление превысило значение
max_allowed_packet. Изменения в этой переменной вступают в силу для всех каналов репликации немедленно, включая работающие каналы.Эта глобальная переменная всегда имеет значение, являющееся положительным целым кратным 1024; если вы установите какое-то другое значение, оно округляется вниз до ближайшего большего кратного 1024 при хранении или использовании; установка
slave_max_allowed_packetв 0 приводит к использованию 1024. (В таких случаях выдается предупреждение об усечении). Значение по умолчанию и максимальное значение равно 1073741824 (1 ГБ); минимальное значение — 1024.
-
Формат командной строки --slave-net-timeout=#Системная переменная slave_net_timeoutОбласть действия Глобальная Динамическая Да Тип Целое число Значение по умолчанию 60Минимальное значение 1Максимальное значение 31536000Единицы измерения секунды Количество секунд, ожидаемых для получения дополнительных данных или сигнала подтверждения от источника, прежде чем реплика посчитает подключение разорванным, прервёт чтение и попытается повторно подключиться. Настройка этой переменной не оказывает немедленного эффекта. Состояние переменной применяется ко всем последующим командам
START SLAVE.Первая попытка повторного подключения происходит сразу после истечения срока ожидания. Интервал между повторными попытками контролируется параметром
MASTER_CONNECT_RETRYдля командыCHANGE MASTER TO, а количество попыток повторного подключения ограничено параметромMASTER_RETRY_COUNTдля командыCHANGE MASTER TO.Интервал отправки сигналов подтверждения, предотвращающий истечение срока ожидания подключения при отсутствии данных, если подключение всё ещё работает, контролируется параметром
MASTER_HEARTBEAT_PERIODдля командыCHANGE MASTER TO. Интервал отправки сигналов подтверждения по умолчанию равен половине значенияslave_net_timeout, и он записывается в репозиторий метаданных подключений реплики и отображается в таблице Performance Schemareplication_connection_configuration. Обратите внимание, что изменение значения или значения по умолчанию дляslave_net_timeoutне автоматически изменяет интервал отправки сигналов подтверждения, независимо от того, был ли он задан явно или использовался ранее вычисленный параметр по умолчанию. При изменении срока ожидания подключения необходимо также выполнить командуCHANGE MASTER TOдля корректировки интервала отправки сигналов подтверждения до подходящего значения, чтобы оно происходило до истечения срока ожидания подключения. -
Формат командной строки --slave-parallel-type=valueСистемная переменная slave_parallel_typeОбласть действия Глобальная Динамическая Да Тип Перечисление Значение по умолчанию DATABASEДопустимые значения DATABASELOGICAL_CLOCKПри использовании многопоточной реплики (
slave_parallel_workersбольше 0) эта переменная определяет политику, используемую для определения транзакций, которые разрешено выполнять параллельно на реплике. Переменная не оказывает влияния на реплики, для которых многопоточность не включена. Возможные значения:LOGICAL_CLOCK: Транзакции, которые являются частью одного и того же группового подтверждения в двоичном журнале на источнике, применяются параллельно на реплике. Зависимости между транзакциями отслеживаются на основе их временных меток, чтобы обеспечить дополнительную параллелизацию, где это возможно. При заданном значении системная переменнаяbinlog_transaction_dependency_trackingна источнике может использоваться для указания того, что наборы записей используются для параллелизации вместо временных меток, если для транзакции доступен набор записей, и это даёт лучшие результаты по сравнению с временными метками.DATABASE: Транзакции, обновляющие различные базы данных, применяются параллельно. Это значение уместно только в том случае, если данные разделены на несколько баз данных, которые независимо и одновременно обновляются на источнике. Не должно быть межбазовых ограничений, так как такие ограничения могут нарушаться на реплике.
Если
slave_preserve_commit_order=1установлено, можно использовать толькоLOGICAL_CLOCK.Если топология репликации использует несколько уровней реплик,
LOGICAL_CLOCKможет добиться меньшей параллелизации на каждом уровне, на который реплика удалена от источника. Это влияние можно уменьшить, используяbinlog_transaction_dependency_trackingна источнике для указания использования наборов записей вместо временных меток для параллелизации, где это возможно. -
Формат командной строки --slave-parallel-workers=#Системная переменная slave_parallel_workersОбласть действия Глобальная Динамическая Да Тип Целое число Значение по умолчанию 0Минимальное значение 0Максимальное значение 1024Устанавливает количество потоков прикладного уровня для параллельного выполнения транзакций репликации. Установка этого значения на число больше 0 создаёт многопоточную реплику с указанным количеством потоков прикладного уровня. При установке в 0 (значение по умолчанию) параллельное выполнение отключено, и реплика использует один поток прикладного уровня. Установка
slave_parallel_workersне имеет немедленного эффекта. Состояние переменной применяется ко всем последующим командамSTART SLAVE.ПримечаниеМногопоточные реплики в настоящее время не поддерживаются NDB Cluster, который игнорирует настройку этой переменной. Более подробную информацию см. в Разделе 21.7.3, «Известные проблемы в репликации NDB Cluster».
Многопоточная реплика обеспечивает параллельное выполнение с помощью координирующего потока и количества потоков прикладного уровня, настроенного этой переменной. Способ распределения транзакций между потоками прикладного уровня настроен переменной
slave_parallel_type. Транзакции, которые реплика применяет параллельно, могут завершаться не в порядке, если не установленоslave_preserve_commit_order=1. Поэтому проверка наиболее недавно выполненной транзакции не гарантирует, что все предыдущие транзакции с источника были выполнены на реплике. Это имеет последствия для ведения журнала и восстановления при использовании многопоточной реплики. Например, в многопоточной реплике командаSTART SLAVE UNTILподдерживает только использованиеSQL_AFTER_MTS_GAPS.В MySQL 5.7 поддерживается повторная попытка транзакций при включении многопоточности на реплике. В предыдущих версиях
slave_transaction_retriesобрабатывалась как равная 0 при использовании многопоточных реплик.Многопоточные реплики в настоящее время не поддерживаются NDB Cluster. Более подробную информацию о том, как
NDBобрабатывает настройки этой переменной, см. в Разделе 21.7.3, «Известные проблемы в репликации NDB Cluster».
-
Формат командной строки --slave-pending-jobs-size-max=#Системная переменная slave_pending_jobs_size_maxОбласть действия Глобальная Динамическая Да Тип Целое число Значение по умолчанию 16MМинимальное значение 1024Максимальное значение 16EiBЕдиница измерения байты Размер блока 1024Для реплик с многопоточностью эта переменная задает максимальный объём памяти (в байтах), доступный для очередей обработки событий, которые ещё не были применены. Установка этой переменной не влияет на реплики, для которых многопоточность не включена. Установка этой переменной не имеет немедленного эффекта. Состояние переменной применяется ко всем последующим командам
START SLAVE.Минимальное возможное значение для этой переменной равно 1024; значение по умолчанию равно 16 МБ. Максимальное возможное значение равно 18446744073709551615 (16 эксабайт). Значения, которые не являются точными кратными 1024, округляются вниз до ближайшего большего кратного 1024 перед сохранением.
Значение этой переменной является мягким ограничением и может быть установлено в соответствии с обычной нагрузкой. Если событие необычно большого размера превышает этот размер, транзакция удерживается до тех пор, пока все рабочие потоки не освободят свои очереди, а затем обрабатывается. Все последующие транзакции удерживаются до завершения обработки большой транзакции.
-
Формат командной строки --slave-preserve-commit-order[={OFF|ON}]Системная переменная slave_preserve_commit_orderОбласть действия Глобальная Динамическая Да Тип Булево Значение по умолчанию OFFДля реплик с многопоточностью значение 1 для этой переменной гарантирует, что транзакции экстернализируются на реплике в том же порядке, как они появляются в журнале репликации реплики, и предотвращает разрывы в последовательности транзакций, выполненных из журнала репликации. Эта переменная не влияет на реплики, для которых многопоточность не включена. Обратите внимание, что
slave_preserve_commit_order=1не сохраняет порядок нетранзакционных обновлений DML, поэтому они могут быть подтверждены до транзакций, которые предшествуют им в журнале репликации, что может привести к разрывам.slave_preserve_commit_order=1требует, чтобы--log-binи--log-slave-updatesбыли включены на реплике, иslave_parallel_typeбыло установлено в значениеLOGICAL_CLOCK. Перед изменением этой переменной все потоки репликации (для всех каналов репликации, если вы используете несколько каналов репликации) должны быть остановлены.При включённом
slave_preserve_commit_order, исполняемый поток ожидает, пока все предыдущие транзакции не будут подтверждены, прежде чем подтвердить текущую. Пока поток ожидает подтверждения других рабочих потоков, он сообщает о своём статусе какWaiting for preceding transaction to commit. (До MySQL 5.7.8 это отображалось какWaiting for its turn to commit.) Включение этого режима на многопоточной реплике гарантирует, что она никогда не переходит в состояние, в котором не была исходная. Это поддерживает использование репликации для масштабирования чтения. См. Раздел 16.3.4, «Использование репликации для масштабирования чтения».Если
slave_preserve_commit_order=0установлено, транзакции, которые реплика применяет параллельно, могут быть подтверждены не в порядке. Поэтому проверка последней выполненной транзакции не гарантирует, что все предыдущие транзакции из источника были выполнены на реплике. Возможны разрывы в последовательности транзакций, выполненных из журнала репликации реплики. Это имеет последствия для ведения журнала и восстановления при использовании многопоточной реплики. Обратите внимание, что настройкаslave_preserve_commit_order=1предотвращает разрывы, но не предотвращает отставание позиции исходного двоичного журнала (гдеExec_master_log_posотстаёт от позиции, до которой транзакции были выполнены). См. Раздел 16.4.1.32, «Репликация и несогласованности транзакций» для получения дополнительной информации. -
Формат командной строки --slave-rows-search-algorithms=valueСистемная переменная slave_rows_search_algorithmsОбласть действия Глобальная Динамическая Да Тип Множество Значение по умолчанию TABLE_SCAN,INDEX_SCANДопустимые значения TABLE_SCAN,INDEX_SCANINDEX_SCAN,HASH_SCANTABLE_SCAN,HASH_SCANTABLE_SCAN,INDEX_SCAN,HASH_SCAN(эквивалентно INDEX_SCAN,HASH_SCAN)При подготовке пакетов строк для журналов строк и репликации эта переменная управляет тем, как строки ищутся для совпадений, в частности, используется ли хеширование. Установка этой переменной вступает в силу для всех каналов репликации немедленно, включая работающие каналы.
Укажите список значений, разделённых запятыми, из следующих комбинаций 2 значений из списка
INDEX_SCAN,TABLE_SCAN,HASH_SCAN. Ожидаемое значение — строка, поэтому, если переменная устанавливается во время выполнения, а не при запуске сервера, значение должно быть заключено в кавычки. Кроме того, значение не должно содержать пробелов. Рекомендуемые комбинации (списки) и их эффекты показаны в следующей таблице:Используемый индекс/значение INDEX_SCAN,HASH_SCANINDEX_SCAN,TABLE_SCANКлюч первичного или уникального ключа Сканирование по индексу Сканирование по индексу (Другой) Ключ Хеш-сканирование по индексу Сканирование по индексу Без индекса Хеш-сканирование Сканирование таблицы Значение по умолчанию —
INDEX_SCAN,TABLE_SCAN, что означает, что все поиски, которые могут использовать индексы, используют их, а поиски без индексов используют сканирование таблицы.Для использования хеширования для любых поисков, которые не используют первичный или уникальный ключ, установите
INDEX_SCAN,HASH_SCAN. УказаниеINDEX_SCAN,HASH_SCANимеет тот же эффект, что и указаниеINDEX_SCAN,TABLE_SCAN,HASH_SCAN, что разрешено.Не используйте комбинацию
TABLE_SCAN,HASH_SCAN. Эта настройка принудительно включает хеширование для всех поисков. Это не имеет преимуществ передINDEX_SCAN,HASH_SCAN, и может привести к ошибкам "“запись не найдена”" или ошибкам дублирования ключей в случае одного события, содержащего несколько обновлений одной и той же строки или обновлений, которые зависят от порядка.
Порядок, в котором алгоритмы указаны в списке, не влияет на порядок, в котором они отображаются операцией
SELECTилиSHOW VARIABLES.Можно указать одно значение, но это не оптимально, поскольку установка одного значения ограничивает поиски использованием только этого алгоритма. В частности, установка только
INDEX_SCANне рекомендуется, так как в этом случае поиски вообще не смогут найти строки, если индекс отсутствует. -
Формат командной строки --slave-skip-errors=nameСистемная переменная slave_skip_errorsОбласть действия Глобальная Динамическая Нет Тип Строка Значение по умолчанию OFFДопустимые значения OFF[list of error codes]allddl_exist_errorsОбычно репликация останавливается при возникновении ошибки на реплике, что даёт вам возможность вручную устранить несоответствие в данных. Эта переменная заставляет поток SQL репликации продолжить репликацию, когда оператор возвращает любую из перечисленных в значении переменной ошибок.
-
Формат командной строки --slave-sql-verify-checksum[={OFF|ON}]Системная переменная slave_sql_verify_checksumОбласть действия Глобальная Динамическая Да Тип Булево Значение по умолчанию ONПринуждает поток SQL репликации проверять данные с помощью контрольных сумм, считанных из журнала репликации relay log. В случае несоответствия реплика останавливается с ошибкой. Изменение этой переменной вступает в силу для всех каналов репликации сразу, включая работающие каналы.
ПримечаниеПоток I/O репликации всегда считывает контрольные суммы, если это возможно, при приёме событий из сети.
-
Формат командной строки --slave-transaction-retries=#Системная переменная slave_transaction_retriesОбласть действия Глобальная Динамическая Да Тип Целое Значение по умолчанию 10Минимальное значение 0Максимальное значение (64-битные платформы) 18446744073709551615Максимальное значение (32-битные платформы) 4294967295Если поток SQL репликации не может выполнить транзакцию из-за тупика в
InnoDBили время выполнения транзакции превысилоInnoDB'sinnodb_lock_wait_timeoutилиNDB'sTransactionDeadlockDetectionTimeoutилиTransactionInactiveTimeout, то он автоматически повторяет попыткуslave_transaction_retriesраз, прежде чем остановить выполнение с ошибкой. Транзакции с ошибкой, не являющейся временной, не повторяются.Значение по умолчанию для
slave_transaction_retriesравно 10. Установка переменной в 0 отключает автоматическое повторное выполнение транзакций. Изменение этой переменной вступает в силу для всех каналов репликации сразу, включая работающие каналы.Начиная с MySQL 5.7.5, повторное выполнение транзакций поддерживается при включённом многопоточном режиме на реплике. В предыдущих версиях
slave_transaction_retriesобрабатывалась как равная 0 при использовании многопоточных реплик.Таблица Performance Schema
replication_applier_statusотображает количество повторов, произошедших в каждом канале репликации, в столбцеCOUNT_TRANSACTIONS_RETRIES. -
Формат командной строки --slave-type-conversions=setСистемная переменная slave_transaction_retriesОбласть действия Глобальная Динамическая Да Тип Множество Значение по умолчанию Допустимые значения ALL_LOSSYALL_NON_LOSSYALL_SIGNEDALL_UNSIGNEDУправляет режимом преобразования типов на реплике при использовании репликации на основе строк. В MySQL 5.7.2 и выше, его значение — это список из нуля или более элементов, разделённых запятыми из списка:
ALL_LOSSY,ALL_NON_LOSSY,ALL_SIGNED,ALL_UNSIGNED. Установите эту переменную в пустую строку, чтобы запретить преобразования типов между источником и репликой. Изменение этой переменной вступает в силу для всех каналов репликации сразу, включая работающие каналы.ALL_SIGNEDиALL_UNSIGNEDбыли добавлены в MySQL 5.7.2 (Bug#15831300). Для дополнительной информации о режимах преобразования типов, применимых к продвижению и понижению атрибутов при репликации на основе строк, см. Репликация на основе строк: продвижение и понижение атрибутов. -
Системная переменная sql_slave_skip_counterОбласть действия Глобальная Динамическая Да Тип Целое Значение по умолчанию 0Минимальное значение 0Максимальное значение 4294967295Количество событий из источника, которое реплика должна пропустить. Установка параметра не имеет немедленного эффекта. Переменная применяется к следующему оператору
START SLAVE; следующий операторSTART SLAVEтакже изменяет значение обратно на 0. Когда эта переменная установлена в ненулевое значение и настроено несколько каналов репликации, операторSTART SLAVEможет быть использован только с клаузойFOR CHANNEL.channelЭтот параметр несовместим с репликацией на основе GTID и не должен быть установлен в ненулевое значение при
gtid_mode=ON. Если необходимо пропустить транзакции при использовании GTID, используйтеgtid_executedиз источника. См. Раздел 16.1.7.3, “Пропуск транзакций”.ВажноЕсли пропуск указанного числа событий при установке этой переменной заставит реплику начать с середины группы событий, реплика продолжает пропускать события, пока не найдёт начало следующей группы событий и не начнёт с неё. Для получения дополнительной информации см. Раздел 16.1.7.3, “Пропуск транзакций”.
-
Формат командной строки --sync-master-info=#Системная переменная sync_master_infoОбласть действия Глобальная Динамическая Да Тип Целое Значение по умолчанию 10000Минимальное значение 0Максимальное значение 4294967295Влияние этой переменной на реплику зависит от того, установлено ли для реплики
master_info_repositoryвFILEилиTABLE, как описано в следующих разделах.master_info_repository = FILE. Если значение
sync_master_infoбольше 0, реплика синхронизирует свой файлmaster.infoна диск (используяfdatasync()) после каждыхsync_master_infoсобытий. Если оно равно 0, сервер MySQL не выполняет синхронизацию файлаmaster.infoна диск; вместо этого сервер полагается на операционную систему для периодической записи его содержимого, как и с любым другим файлом.master_info_repository = TABLE. Если значение
sync_master_infoбольше 0, реплика обновляет таблицу своего хранилища метаданных подключения после каждыхsync_master_infoсобытий. Если оно равно 0, таблица никогда не обновляется.Значение по умолчанию для
sync_master_infoравно 10000. Изменение этой переменной вступает в силу для всех каналов репликации сразу, включая работающие каналы.
-
Формат командной строки --sync-relay-log=#Системная переменная sync_relay_logОбласть действия Глобальная Динамическая Да Тип Целое число Значение по умолчанию 10000Минимальное значение 0Максимальное значение 4294967295Если значение этой переменной больше 0, сервер MySQL синхронизирует свой релейный журнал на диск (используя
fdatasync()) после каждыхsync_relay_logсобытий, записанных в релейный журнал. Установка этой переменной вступает в силу для всех каналов репликации немедленно, включая работающие каналы.Установка
sync_relay_logв 0 не приводит к никакой синхронизации на диск; в этом случае сервер полагается на операционную систему для периодической записи содержимого релейного журнала в файлы, как и для любого другого файла.Значение 1 является наиболее безопасным выбором, потому что в случае непредвиденной остановки вы потеряете не более одного события из релейного журнала. Однако это также самый медленный выбор (если диск не имеет кэша с батарейным питанием, что делает синхронизацию очень быстрой). Для получения информации о сочетании настроек на реплике, обеспечивающей наибольшую устойчивость к непредвиденным остановкам, см. Раздел 16.3.2, «Обработка непредвиденной остановки реплики».
-
Формат командной строки --sync-relay-log-info=#Системная переменная sync_relay_log_infoОбласть действия Глобальная Динамическая Да Тип Целое число Значение по умолчанию 10000Минимальное значение 0Максимальное значение 4294967295Значение по умолчанию для
sync_relay_log_infoравно 10000. Установка этой переменной вступает в силу для всех каналов репликации немедленно, включая работающие каналы.Влияние этой переменной на реплику зависит от настройки сервера
relay_log_info_repository(FILEилиTABLE). Если настройка равнаTABLE, то влияние переменной также зависит от того, является ли используемый движок хранения для таблицы relay log info транзакционным (таким какInnoDB) или нетранзакционным (MyISAM). Влияние этих факторов на поведение сервера для значенийsync_relay_log_infoравных нулю и больше нуля таково:-
sync_relay_log_info = 0 Если
relay_log_info_repositoryустановлено вFILE, сервер MySQL не выполняет синхронизацию файлаrelay-log.infoна диск; вместо этого сервер полагается на операционную систему для периодической записи его содержимого в файл, как и для любого другого файла.Если
relay_log_info_repositoryустановлено вTABLE, и движок хранения для этой таблицы транзакционный, таблица обновляется после каждой транзакции. (Настройкаsync_relay_log_infoв этом случае игнорируется).Если
relay_log_info_repositoryустановлено вTABLE, и движок хранения для этой таблицы не транзакционный, таблица никогда не обновляется.
-
sync_relay_log_info =N> 0 Если
relay_log_info_repositoryустановлено вFILE, реплика синхронизирует свой файлrelay-log.infoна диск (используяfdatasync()) после каждойNтранзакции.Если
relay_log_info_repositoryустановлено вTABLE, и движок хранения для этой таблицы транзакционный, таблица обновляется после каждой транзакции. (Настройкаsync_relay_log_infoв этом случае игнорируется).Если
relay_log_info_repositoryустановлено вTABLE, и движок хранения для этой таблицы не транзакционный, таблица обновляется после каждыхNсобытий.
-
© 2025 Oracle
Licensed under the GPLv2 License.