19.1.6.3 Параметры и переменные сервера реплики
В этом разделе описаны параметры сервера и системные переменные, применяемые к серверам реплики, и содержится следующее:
Укажите параметры либо в командной строке, либо в файле параметров. Многие параметры можно задать во время работы сервера, используя оператор CHANGE REPLICATION SOURCE TO. Значения системных переменных указываются с помощью SET.
Идентификатор сервера. На исходном сервере и каждой реплике необходимо установить системную переменную server_id для определения уникального идентификатора репликации в диапазоне от 1 до 232 − 1. “Уникальность” означает, что каждый идентификатор должен отличаться от всех других идентификаторов, используемых другими исходными серверами или репликами в топологии репликации. Пример файла my.cnf:
[mysqld]
server-id=3
Параметры запуска для серверов реплики
В этом разделе описаны параметры запуска для управления серверами реплики. Многие из этих параметров можно задать во время работы сервера, используя оператор CHANGE REPLICATION
SOURCE TO. Другие параметры, такие как параметры --replicate-*, можно задать только при запуске сервера реплики. Системные переменные, связанные с репликацией, будут описаны позже в этом разделе.
-
Формат командной строки --master-retry-count=#Устаревший Да Тип Целое число Значение по умолчанию 10Минимальное значение 0Максимальное значение (64-разрядные платформы) 18446744073709551615Максимальное значение (32-разрядные платформы) 4294967295Этот параметр устарел; ожидается его удаление в будущих выпусках MySQL. Вместо этого используйте параметр
SOURCE_RETRY_COUNTоператораCHANGE REPLICATION SOURCE TO. -
Формат командной строки --max-relay-log-size=#Системная переменная max_relay_log_sizeОбласть действия Глобальная Динамическая Да SET_VARПрименяется подсказкаНет Тип Целое число Значение по умолчанию 0Минимальное значение 0Максимальное значение 1073741824Единица измерения байты Размер блока 4096Размер, при котором сервер автоматически переключает файлы журнала репликации. Если это значение отличное от нуля, журнал репликации переключается автоматически, когда его размер превышает это значение. Если это значение равно нулю (по умолчанию), размер, при котором происходит переключение журнала репликации, определяется значением
max_binlog_size. Дополнительную информацию см. в разделе 19.2.4.1, «Журнал репликации». -
Формат командной строки --relay-log-purge[={OFF|ON}]Системная переменная relay_log_purgeОбласть действия Глобальная Динамическая Да SET_VARПрименяется подсказкаНет Тип Булево Значение по умолчанию ONОтключить или включить автоматическое очищение журналов репликации, как только они больше не нужны. Значение по умолчанию равно 1 (включено). Это глобальная переменная, которую можно изменить динамически с помощью
SET GLOBAL relay_log_purge =. Отключение очистки журналов репликации при включении параметраN--relay-log-recoveryсоздает риск несоответствия данных и поэтому не является безопасным при сбоях. -
Формат командной строки --relay-log-space-limit=#Системная переменная relay_log_space_limitОбласть действия Глобальная Динамическая Нет SET_VARПрименяется подсказкаНет Тип Целое число Значение по умолчанию 0Минимальное значение 0Максимальное значение 18446744073709551615Единица измерения байты Этот параметр устанавливает максимальный предел размера всех журналов репликации на реплике в байтах. Значение 0 означает “без ограничения”. Это полезно для сервера реплики с ограниченным дисковым пространством. Когда лимит достигнут, поток ввода-вывода (приемник) прекращает чтение событий журнала двоичных логов с исходного сервера до тех пор, пока поток SQL не догонит и не удалит некоторые неиспользуемые журналы репликации. Обратите внимание, что этот лимит не является абсолютным: существуют случаи, когда потоку SQL (применительно) нужны дополнительные события, прежде чем он сможет удалить журналы репликации. В этом случае поток приемник превышает лимит, пока потоку применительно не станет возможным удалить некоторые журналы репликации, поскольку это не приведет к тупиковой ситуации. Не следует устанавливать
--relay-log-space-limitниже чем в два раза больше значения--max-relay-log-size(или--max-binlog-size, если--max-relay-log-sizeравно 0). В этом случае есть вероятность, что поток приемник будет ожидать освобождения места, поскольку--relay-log-space-limitпревышен, но поток применительно не имеет журнала репликации для очистки и не может удовлетворить поток приемник. Это заставляет поток приемник временно игнорировать--relay-log-space-limit.
-
Формат командной строки --replicate-do-db=nameТип Строка Создаёт фильтр репликации, используя имя базы данных. Такие фильтры также можно создать с помощью
CHANGE REPLICATION FILTER REPLICATE_DO_DB.Этот параметр поддерживает фильтры репликации, специфичные для канала, что позволяет многоисточниковым репликам использовать конкретные фильтры для разных источников. Для настройки фильтра репликации, специфичного для канала, с именем
channel_1, используйте--replicate-do-db:. В этом случае первая двоеточие интерпретируется как разделитель, а последующие двоеточия являются буквальными двоеточиями. Дополнительную информацию см. в Разделе 19.2.5.4, «Фильтры репликации на основе каналов».channel_1:db_nameПримечаниеГлобальные фильтры репликации не могут использоваться на экземпляре сервера MySQL, настроенном для репликации группы, поскольку фильтрация транзакций на некоторых серверах сделает группу неспособной достичь соглашения о согласованном состоянии. Фильтры репликации, специфичные для канала, могут использоваться на каналах репликации, которые не участвуют непосредственно в репликации группы, например, когда член группы также выступает в качестве реплики для источника, который находится за пределами группы. Они не могут использоваться на каналах
group_replication_applierилиgroup_replication_recovery.Точное действие этого фильтра репликации зависит от того, используется ли репликация на основе инструкций или на основе строк.
Репликация на основе инструкций. Сообщите потоку репликации 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=. См. Раздел 19.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.Этот параметр поддерживает фильтры репликации, специфичные для канала, что позволяет многоисточниковым репликам использовать специфические фильтры для различных источников. Чтобы настроить фильтр репликации, специфичный для канала, в канале с именем
channel_1, используйте--replicate-ignore-db:. В этом случае первая двоеточие интерпретируется как разделитель, а последующие двоеточия — как литеральные двоеточия. Дополнительную информацию см. в разделе 19.2.5.4 «Фильтры репликации, основанные на каналах».channel_1:db_nameПримечаниеГлобальные фильтры репликации не могут быть использованы на экземпляре сервера MySQL, настроенном для Group Replication, так как фильтрация транзакций на некоторых серверах может привести к тому, что группа не сможет достичь соглашения о согласованном состоянии. Фильтры репликации, специфичные для канала, могут использоваться в каналах репликации, которые не участвуют непосредственно в Group Replication, например, когда член группы также выступает в качестве реплики для источника, находящегося за пределами группы. Они не могут быть использованы в каналах
group_replication_applierилиgroup_replication_recovery.Чтобы указать более одной базы данных для игнорирования, используйте этот параметр несколько раз, по одному для каждой базы данных. Так как имена баз данных могут содержать запятые, если вы укажете список, разделённый запятыми, он будет рассматриваться как имя одной базы данных.
Как и
--replicate-do-db, точное действие этого фильтра зависит от того, используется ли репликация на основе инструкций или на основе строк, и описано в следующих нескольких абзацах.Репликация на основе инструкций. Указывает потоку SQL репликации не реплицировать ни одну инструкцию, где базой данных по умолчанию (т. е. той, которая выбрана с помощью
USE) являетсяdb_name.Репликация на основе строк. Указывает потоку SQL репликации не обновлять ни одну таблицу в базе данных
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источника, игнорируются репликой.Не следует использовать этот параметр, если вы используете межбазовую операцию обновления и не хотите, чтобы эти обновления реплицировались. См. раздел 19.2.5 «Как сервера оценивают правила фильтрации репликации».
Если вам нужно, чтобы межбазовые обновления работали, используйте
--replicate-wild-ignore-table=вместо этого. См. раздел 19.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Тип Строка Создаёт фильтр репликации, указывая потоку SQL репликации ограничить репликацию заданной таблицей. Чтобы указать более одной таблицы, используйте этот параметр несколько раз, по одному для каждой таблицы. Это работает как для межбазовых, так и для обновлений в базе данных по умолчанию, в отличие от
--replicate-do-db. См. раздел 19.2.5 «Как сервера оценивают правила фильтрации репликации». Вы также можете создать такой фильтр, выполнив инструкциюCHANGE REPLICATION FILTER REPLICATE_DO_TABLE.Этот параметр поддерживает фильтры репликации, специфичные для канала, что позволяет многоисточниковым репликам использовать специфические фильтры для различных источников. Чтобы настроить фильтр репликации, специфичный для канала, в канале с именем
channel_1, используйте--replicate-do-table:. В этом случае первая двоеточие интерпретируется как разделитель, а последующие двоеточия — как литеральные двоеточия. Дополнительную информацию см. в разделе 19.2.5.4 «Фильтры репликации, основанные на каналах».channel_1:db_name.tbl_nameПримечаниеГлобальные фильтры репликации не могут быть использованы на экземпляре сервера MySQL, настроенном для Group Replication, так как фильтрация транзакций на некоторых серверах может привести к тому, что группа не сможет достичь соглашения о согласованном состоянии. Фильтры репликации, специфичные для канала, могут использоваться в каналах репликации, которые не участвуют непосредственно в Group Replication, например, когда член группы также выступает в качестве реплики для источника, находящегося за пределами группы. Они не могут быть использованы в каналах
group_replication_applierилиgroup_replication_recovery.Этот параметр затрагивает только инструкции, относящиеся к таблицам. Он не влияет на инструкции, которые относятся только к другим объектам базы данных, таким как хранимые процедуры. Для фильтрации инструкций, выполняемых над хранимыми процедурами, используйте один или несколько параметров
--replicate-*-db.
-
--replicate-ignore-table=db_name.tbl_nameФормат командной строки --replicate-ignore-table=nameТип Строка Создаёт фильтр репликации, сообщая потоку репликации SQL, что не нужно реплицировать ни одно оператор обновление указанной таблицы, даже если другие таблицы могут быть обновлены тем же оператором. Для указания более одной таблицы для игнорирования используйте этот параметр несколько раз, по одному для каждой таблицы. Это работает для межбазовых обновлений, в отличие от
--replicate-ignore-db. См. Раздел 19.2.5, «Как серверы оценивают правила фильтрации репликации». Вы также можете создать такой фильтр, выполнив операторCHANGE REPLICATION FILTER REPLICATE_IGNORE_TABLE.Этот параметр поддерживает специфичные для канала фильтры репликации, позволяя репликам с несколькими источниками использовать специфичные фильтры для разных источников. Для настройки специфичного для канала фильтра репликации для канала с именем
channel_1используйте--replicate-ignore-table:. В этом случае первая двоеточие интерпретируется как разделитель, а последующие двоеточия как литеральные двоеточия. Подробности см. в Разделе 19.2.5.4, «Фильтры репликации на основе каналов».channel_1:db_name.tbl_nameПримечаниеГлобальные фильтры репликации не могут быть использованы на экземпляре сервера MySQL, настроенном для Group Replication, потому что фильтрация транзакций на некоторых серверах сделает группу неспособной достичь согласия по состоянию. Канальные фильтры репликации могут быть использованы на каналах репликации, которые не участвуют непосредственно в Group Replication, например, когда член группы также действует как реплика для источника, который находится за пределами группы. Они не могут быть использованы для каналов
group_replication_applierилиgroup_replication_recovery.Этот параметр влияет только на операторы, применяемые к таблицам. Он не влияет на операторы, которые применяются только к другим объектам базы данных, таким как хранимые процедуры. Для фильтрации операторов, работающих с хранимыми процедурами, используйте один или несколько параметров
--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.Этот параметр поддерживает специфичные для канала фильтры репликации, позволяя репликам с несколькими источниками использовать специфичные фильтры для разных источников. Укажите имя канала, за которым следует двоеточие, а затем спецификацию фильтра. Первое двоеточие интерпретируется как разделитель, а последующие двоеточия интерпретируются как литеральные двоеточия. Например, для настройки специфичного для канала фильтра репликации для канала с именем
channel_1используйте:$>
mysqld --replicate-rewrite-db=channel_1:db_name1->db_name2Если вы используете двоеточие, но не указываете имя канала, параметр настраивает фильтр репликации для канала репликации по умолчанию. Подробности см. в Разделе 19.2.5.4, «Фильтры репликации на основе каналов».
ПримечаниеГлобальные фильтры репликации не могут быть использованы на экземпляре сервера MySQL, настроенном для Group Replication, потому что фильтрация транзакций на некоторых серверах сделает группу неспособной достичь согласия по состоянию. Канальные фильтры репликации могут быть использованы на каналах репликации, которые не участвуют непосредственно в Group Replication, например, когда член группы также действует как реплика для источника, который находится за пределами группы. Они не могут быть использованы для каналов
group_replication_applierилиgroup_replication_recovery. -
Формат командной строки --replicate-same-server-id[={OFF|ON}]Тип Булево Значение по умолчанию OFFЭтот параметр предназначен для использования на репликах. Значение по умолчанию 0 (
FALSE). При установке параметра в 1 (TRUE) реплика не пропускает события, имеющие собственный идентификатор сервера. Это значение обычно полезно только в редких конфигурациях.При включённом двоичном логгировании на реплике сочетание параметров
--replicate-same-server-idи--log-replica-updatesна реплике может привести к бесконечным циклам в репликации, если сервер является частью кольцевой топологии репликации. (В MySQL 8.4 двоичное логгирование включено по умолчанию, а логгирование обновлений реплики — по умолчанию, когда включено двоичное логгирование.) Однако использование глобальных идентификаторов транзакций (GTID) предотвращает эту ситуацию, пропуская выполнение транзакций, которые уже были применены. Еслиgtid_mode=ONустановлен на реплике, вы можете запустить сервер с этим сочетанием параметров, но вы не можете изменить режим GTID во время работы сервера. Если установлен любой другой режим GTID, сервер не запускается с этим сочетанием параметров.По умолчанию поток репликации I/O (приёмник) не записывает события двоичного журнала в релейный журнал, если они имеют идентификатор сервера реплики (этот оптимизация помогает сохранить дисковое пространство). Если вы хотите использовать
--replicate-same-server-id, убедитесь, что вы запустили реплику с этим параметром, прежде чем вы сделаете реплику читает свои собственные события, которые вы хотите, чтобы поток репликации SQL (применитель) выполнял.
-
--replicate-wild-do-table=db_name.tbl_nameФормат командной строки --replicate-wild-do-table=nameТип Строка Создаёт фильтр репликации, сообщая потоку репликации SQL (применителя) о необходимости ограничить репликацию операторами, в которых любые обновляемые таблицы соответствуют указанным образцам имён базы данных и таблиц. Образцы могут содержать символы подстановки
%и_, которые имеют такое же значение, как и для оператора сопоставления с образцомLIKE. Для указания нескольких таблиц используйте этот параметр несколько раз, по одному для каждой таблицы. Это работает для межбазовых обновлений. См. Раздел 19.2.5, «Как серверы оценивают правила фильтрации репликации». Вы также можете создать такой фильтр, выполнив операторCHANGE REPLICATION FILTER REPLICATE_WILD_DO_TABLE.Этот параметр поддерживает специфичные для канала фильтры репликации, позволяя репликам с несколькими источниками использовать специфичные фильтры для различных источников. Чтобы настроить фильтр репликации, специфичный для канала с именем
channel_1, используйте--replicate-wild-do-table:. В этом случае первая двоеточие интерпретируется как разделитель, а последующие двоеточия являются буквальными двоеточиями. Для получения дополнительной информации см. Раздел 19.2.5.4, «Фильтры репликации, основанные на каналах».channel_1:db_name.tbl_nameВажноГлобальные фильтры репликации не могут использоваться на экземпляре сервера MySQL, настроенном для репликации в группе, потому что фильтрация транзакций на некоторых серверах помешает группе достичь соглашения об согласованном состоянии. Канал-специфические фильтры репликации могут использоваться на каналах репликации, которые не участвуют напрямую в групповой репликации, например, когда член группы также действует как реплика к источнику, который находится за пределами группы. Они не могут использоваться на каналах
group_replication_applierилиgroup_replication_recovery.Фильтр репликации, указанный параметром
--replicate-wild-do-table, применяется к таблицам, представлениям и триггерам. Он не применяется к хранимым процедурам и функциям или событиям. Чтобы отфильтровать операторы, работающие с этими объектами, используйте один или несколько параметров--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-потоком оператора, в котором любая таблица соответствует заданному шаблону с подстановкой. Чтобы указать более одной таблицы для игнорирования, используйте этот параметр несколько раз, по одному для каждой таблицы. Это работает для межбазовых обновлений. См. Раздел 19.2.5, «Как серверы оценивают правила фильтрации репликации». Вы также можете создать такой фильтр, выполнив оператор
CHANGE REPLICATION FILTER REPLICATE_WILD_IGNORE_TABLE.Этот параметр поддерживает специфичные для канала фильтры репликации, позволяя репликам с несколькими источниками использовать специфичные фильтры для различных источников. Чтобы настроить фильтр репликации, специфичный для канала с именем
channel_1, используйте--replicate-wild-ignore:. В этом случае первая двоеточие интерпретируется как разделитель, а последующие двоеточия являются буквальными двоеточиями. Для получения дополнительной информации см. Раздел 19.2.5.4, «Фильтры репликации, основанные на каналах».channel_1:db_name.tbl_nameВажноГлобальные фильтры репликации не могут использоваться на экземпляре сервера MySQL, настроенном для репликации в группе, потому что фильтрация транзакций на некоторых серверах помешает группе достичь соглашения об согласованном состоянии. Канал-специфические фильтры репликации могут использоваться на каналах репликации, которые не участвуют напрямую в групповой репликации, например, когда член группы также действует как реплика к источнику, который находится за пределами группы. Они не могут использоваться на каналах
group_replication_applierилиgroup_replication_recovery.Например,
--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-replica-start[={OFF|ON}]Системная переменная skip_replica_startОбласть Глобальная Динамическая Нет SET_VARПрименимо ли подсказкаНет Тип Булево Значение по умолчанию OFF--skip-replica-startуказывает серверу репликации не запускать потоки ввода-вывода репликации (приемник) и SQL (применитель) при запуске сервера. Чтобы запустить потоки позже, используйте операторSTART REPLICA.Вы можете использовать системную переменную
skip_replica_startвместо параметра командной строки, чтобы получить доступ к этой функции с помощью структуры привилегий MySQL Server, чтобы администраторам баз данных не требовался какой-либо доступ с привилегиями к операционной системе. -
Формат командной строки --skip-slave-start[={OFF|ON}]Устаревший Да Системная переменная skip_slave_startОбласть Глобальная Динамическая Нет SET_VARПрименимо ли подсказкаНет Тип Булево Значение по умолчанию OFFУстаревшее псевдоним для
--skip-replica-start. -
--slave-skip-errors=[err_code1,err_code2,...|all|ddl_exist_errors]Формат командной строки --slave-skip-errors=nameУстаревший Да Системная переменная slave_skip_errorsОбласть Глобальная Динамическая Нет SET_VARПрименимо ли подсказкаНет Тип Строка Значение по умолчанию OFFДопустимые значения OFF[list of error codes]allddl_exist_errorsУстаревший синоним для
--replica-skip-errors. -
--slave-sql-verify-checksum={0|1}Формат командной строки --slave-sql-verify-checksum[={OFF|ON}]Тип Булево Значение по умолчанию ONУстаревший синоним для
--replica-sql-verify-checksum
Системные переменные, используемые на серверах-репликах
В следующем списке описываются системные переменные для управления серверами-репликами. Их можно установить при запуске сервера, а некоторые из них можно изменить во время выполнения с помощью SET. Параметры сервера, используемые с репликами, перечислены ранее в этом разделе.
-
Формат командной строки --init-replica=nameСистемная переменная init_replicaОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Строка init_replicaпохожа наinit_connect, но представляет собой строку, которая выполняется сервером-репликой каждый раз при запуске потока SQL-репликации. Формат строки такой же, как и для переменнойinit_connect. Установка этой переменной вступает в силу для последующих операторовSTART REPLICA.ПримечаниеПоток SQL-репликации отправляет подтверждение клиенту до выполнения
init_replica. Поэтому не гарантируется, чтоinit_replicaбыл выполнен, когда возвращаетсяSTART REPLICA. См. Раздел 15.4.2.4, «Оператор START REPLICA» для получения дополнительной информации. -
Формат командной строки --init-slave=nameУстарело Да Системная переменная init_slaveОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Строка Устаревший псевдоним для
init_replica. -
Формат командной строки --log-slow-replica-statements[={OFF|ON}]Системная переменная log_slow_replica_statementsОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Логическое Значение по умолчанию OFFКогда включен журнал медленных запросов,
log_slow_replica_statementsвключает ведение журнала для запросов, выполнение которых на реплике заняло болееlong_query_timeсекунд. Обратите внимание, что если используется репликация на основе строк (binlog_format=ROW),log_slow_replica_statementsне оказывает никакого влияния. Запросы добавляются в журнал медленных запросов реплики только тогда, когда они регистрируются в формате оператора в бинарном журнале, то есть когда установленаbinlog_format=STATEMENT, или когда установленаbinlog_format=MIXEDи оператор регистрируется в формате оператора. Медленные запросы, которые регистрируются в строковом формате, когда установленаbinlog_format=MIXED, или которые регистрируются, когда установленаbinlog_format=ROW, не добавляются в журнал медленных запросов реплики, даже если включенаlog_slow_replica_statements.Установка
log_slow_replica_statementsне оказывает немедленного действия. Состояние переменной применяется ко всем последующим операторамSTART REPLICA. Также обратите внимание, что глобальная настройка дляlong_query_timeприменяется в течение всего времени существования потока SQL. Если вы измените эту настройку, вам необходимо остановить и перезапустить поток SQL-репликации, чтобы внедрить там изменения (например, выполнив операторыSTOP REPLICAиSTART REPLICAс параметромSQL_THREAD). -
Формат командной строки --log-slow-slave-statements[={OFF|ON}]Устарело Да Системная переменная log_slow_slave_statementsОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Логическое Значение по умолчанию OFFУстаревший псевдоним для
log_slow_replica_statements. -
Формат командной строки --max-relay-log-size=#Системная переменная max_relay_log_sizeОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 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. См. Раздел 19.2.3, «Потоки репликации».
-
Формат командной строки --relay-log=file_nameСистемная переменная relay_logОбласть действия Глобальная Динамическая Нет SET_VARПрименяется подсказкаНет Тип Имя файла Базовое имя файлов журнала репликации. Для канала репликации по умолчанию базовое имя журнала репликации по умолчанию —
. Для каналов репликации, отличных от канала по умолчанию, базовое имя журнала репликации по умолчанию —host_name-relay-bin, гдеhost_name-relay-bin-channelchannel— имя канала репликации, записанного в этом журнале репликации.Сервер записывает файл в директорию данных, если базовое имя не задано с абсолютным путем, чтобы указать другую директорию. Сервер создаёт файлы журнала репликации последовательно, добавляя числовой суффикс к базовому имени.
Журнал репликации и индекс журнала репликации на сервере репликации не могут иметь тех же имён, что и двоичный журнал и индекс двоичного журнала, имена которых задаются опциями
--log-binи--log-bin-index. Если базовое имя двоичного журнала и базовое имя журнала репликации совпадают, сервер выводит сообщение об ошибке и не запускается.Из-за способа, которым MySQL обрабатывает параметры сервера, если вы задаёте эту переменную при запуске сервера, вы должны указать значение; базовое имя по умолчанию используется только в том случае, если параметр фактически не указан. Если вы задаёте системную переменную
relay_logпри запуске сервера без указания значения, вероятно, возникнет неожиданное поведение; это поведение зависит от других используемых параметров, порядка их указания и того, указаны ли они в командной строке или в файле параметров. Более подробную информацию о том, как MySQL обрабатывает параметры сервера, см. в Разделе 6.2.2, «Указание параметров программы».Если вы задаёте эту переменную, заданное значение также используется в качестве базового имени для файла индекса журнала репликации. Вы можете переопределить это поведение, указав другое базовое имя файла индекса журнала репликации с помощью системной переменной
relay_log_index.Когда сервер считывает запись из файла индекса, он проверяет, содержит ли запись относительный путь. Если содержит, относительная часть пути заменяется абсолютным путем, установленным с помощью системной переменной
relay_log. Абсолютный путь остаётся неизменным; в этом случае индекс необходимо отредактировать вручную, чтобы использовать новые путь или пути.Системная переменная
relay_logможет быть полезна для выполнения следующих задач:Создание журналов репликации, имена которых независимы от имён хостов.
Если вам нужно поместить журналы репликации в область, отличную от каталога данных, потому что журналы репликации имеют тенденцию быть очень большими, и вы не хотите уменьшать
max_relay_log_size.Для увеличения скорости путём использования балансировки нагрузки между дисками.
Вы можете получить имя файла журнала репликации (и путь) из системной переменной
relay_log_basename. -
Системная переменная relay_log_basenameОбласть действия Глобальная Динамическая Нет SET_VARПрименяется подсказкаНет Тип Имя файла Значение по умолчанию datadir + '/' + hostname + '-relay-bin'Содержит базовое имя и полный путь к файлу журнала репликации. Максимальная длина переменной — 256. Эта переменная устанавливается сервером и является только для чтения.
-
Формат командной строки --relay-log-index=file_nameСистемная переменная relay_log_indexОбласть действия Глобальная Динамическая Нет SET_VARПрименяется подсказкаНет Тип Имя файла Значение по умолчанию *host_name*-relay-bin.indexИмя файла индекса журнала репликации. Максимальная длина переменной — 256. Если вы не задаёте эту переменную, но задаёте системную переменную
relay_log, её значение используется в качестве базового имени по умолчанию для файла индекса журнала репликации. Если также не задана переменнаяrelay_log, то для канала репликации по умолчанию имя по умолчанию —, используя имя машины-хоста. Для каналов репликации, отличных от канала по умолчанию, имя по умолчанию —host_name-relay-bin.index, гдеhost_name-relay-bin-channel.indexchannel— имя канала репликации, записанного в этом индексе журнала репликации.По умолчанию журналы репликации находятся в директории данных или в любой другой директории, указанной с помощью системной переменной
relay_log. Вы можете использовать системную переменнуюrelay_log_index, чтобы указать альтернативную директорию, добавив абсолютный путь к базовому имени, чтобы указать другую директорию.Журнал репликации и индекс журнала репликации на сервере репликации не могут иметь тех же имён, что и двоичный журнал и индекс двоичного журнала, имена которых задаются опциями
--log-binи--log-bin-index. Если базовое имя двоичного журнала и базовое имя журнала репликации совпадают, сервер выводит сообщение об ошибке и не запускается.Из-за способа, которым MySQL обрабатывает параметры сервера, если вы задаёте эту переменную при запуске сервера, вы должны указать значение; базовое имя по умолчанию используется только в том случае, если параметр фактически не указан. Если вы задаёте системную переменную
relay_log_indexпри запуске сервера без указания значения, вероятно, возникнет неожиданное поведение; это поведение зависит от других используемых параметров, порядка их указания и того, указаны ли они в командной строке или в файле параметров. Более подробную информацию о том, как MySQL обрабатывает параметры сервера, см. в Разделе 6.2.2, «Указание параметров программы». -
Формат командной строки --relay-log-purge[={OFF|ON}]Системная переменная relay_log_purgeОбласть действия Глобальная Динамическая Да SET_VARПрименяется подсказкаНет Тип Булево Значение по умолчанию ONОтключает или включает автоматическое удаление файлов журнала репликации, как только они больше не нужны. Значение по умолчанию — 1 (
ON).
-
Формат командной строки --relay-log-recovery[={OFF|ON}]Системная переменная relay_log_recoveryОбласть действия Глобальная Динамическая Нет SET_VARПодсказка применяетсяНет Тип Булево Значение по умолчанию OFFЕсли включена, эта переменная включает автоматическое восстановление журнала ретрансляции сразу после запуска сервера. Процесс восстановления создает новый файл журнала ретрансляции, инициализирует позицию потока SQL (применителя) в этом новом журнале ретрансляции и инициализирует поток ввода-вывода (приемника) в позицию потока применителя. Затем чтение журнала ретрансляции из источника продолжается. Если
SOURCE_AUTO_POSITION=1был установлен для канала репликации с использованием оператораCHANGE REPLICATION SOURCE TO, используемая для запуска репликации исходная позиция может быть получена в соединении, а не назначена в этом процессе.Когда
relay_log_recoveryотключена, сервер очищает журнал ретрансляции при запуске, выполняя следующие действия:Удаление любых транзакций, которые остаются незавершенными в конце журнала
Удаление любого файла журнала ретрансляции, который содержит только части незавершенных транзакций
Удаление любой ссылки из файла индекса журнала ретрансляции на любой файл журнала ретрансляции, который был удален
При получении допустимой позиции источника и имени файла источника из журнала ретрансляции обновление позиции потока приемника для соответствия этому файлу и позиции; в противном случае обновление позиции потока приемника для соответствия позиции применителя
Эта глобальная переменная является доступной только для чтения во время выполнения. Ее значение может быть установлено с помощью параметра
--relay-log-recoveryпри запуске сервера реплики, который следует использовать после неожиданной остановки реплики, чтобы гарантировать, что не будут обработаны потенциально поврежденные журналы ретрансляции, и который необходимо использовать для обеспечения отказоустойчивой реплики. Значение по умолчанию равно 0 (отключено). Информацию о сочетании параметров на реплике, наиболее устойчивой к неожиданным остановкам, см. в Разделе 19.4.2, «Обработка неожиданной остановки реплики».Для многопоточной реплики (где
replica_parallel_workersбольше 0) установка--relay-log-recoveryпри запуске автоматически обрабатывает любые несоответствия и пробелы в последовательности транзакций, которые были выполнены из журнала ретрансляции. Эти пробелы могут возникать при использовании репликации на основе позиции файла. (Дополнительные сведения см. в Разделе 19.5.1.34, «Репликация и несоответствия транзакций».) Процесс восстановления журнала ретрансляции обрабатывает пробелы с использованием того же метода, что и операторSTART REPLICA UNTIL SQL_AFTER_MTS_GAPS. Когда реплика достигает согласованного состояния без пробелов, процесс восстановления журнала ретрансляции продолжает извлекать дальнейшие транзакции из источника, начиная с позиции потока SQL (применителя). При использовании репликации на основе GTID многопоточная реплика сначала проверяет, установлено лиSOURCE_AUTO_POSITIONвON, и если это так, пропускает шаг вычисления транзакций, которые следует пропустить или не пропустить, чтобы старые журналы ретрансляции не требовались для процесса восстановления.ПримечаниеЭта переменная не влияет на следующие каналы групповой репликации:
group_replication_appliergroup_replication_recovery
Любые другие каналы, работающие в группе, затрагиваются, например, канал, реплицирующий из внешнего источника или другой группы.
-
Формат командной строки --relay-log-space-limit=#Системная переменная relay_log_space_limitОбласть действия Глобальная Динамическая Нет SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 0Минимальное значение 0Максимальное значение 18446744073709551615Единица байты Максимальный объем пространства для использования всеми журналами ретрансляции.
-
Формат командной строки --replica-checkpoint-group=#Системная переменная replica_checkpoint_groupОбласть действия Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 512Минимальное значение 32Максимальное значение 524280Размер блока 8replica_checkpoint_groupустанавливает максимальное количество транзакций, которые могут быть обработаны многопоточной репликой, прежде чем будет вызвана операция контрольной точки для обновления ее состояния, как показано вSHOW REPLICA STATUS. Установка этой переменной не оказывает влияния на реплики, для которых многопоточность не включена. Установка этой переменной не оказывает немедленного эффекта. Состояние переменной применяется ко всем последующим операторамSTART REPLICA.Эта переменная работает в сочетании с системной переменной
replica_checkpoint_periodтаким образом, что при превышении любого из ограничений контрольная точка выполняется, а счетчики, отслеживающие как количество транзакций, так и время, прошедшее с момента последней контрольной точки, сбрасываются.Минимально допустимое значение для этой переменной равно 32, если только сервер не был собран с использованием
-DWITH_DEBUG, в этом случае минимальное значение равно 1. Эффективное значение всегда кратно 8; вы можете установить его на значение, которое не является таким кратным, но сервер округляет его вниз до ближайшего меньшего кратного 8 перед сохранением значения. (Исключение: такое округление не выполняется отладочным сервером.) Независимо от того, как был собран сервер, значение по умолчанию равно 512, а максимально допустимое значение равно 524280. -
Формат командной строки --replica-checkpoint-period=#Системная переменная replica_checkpoint_periodОбласть действия Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 300Минимальное значение 1Максимальное значение 4294967295Единица миллисекунды replica_checkpoint_periodустанавливает максимальное время (в миллисекундах), которое разрешено проходить до вызова операции контрольной точки для обновления состояния многопоточной реплики, как показано вSHOW REPLICA STATUS. Установка этой переменной не оказывает влияния на реплики, для которых многопоточность не включена. Установка этой переменной вступает в силу для всех каналов репликации немедленно, включая работающие каналы.Эта переменная работает в сочетании с системной переменной
replica_checkpoint_groupтаким образом, что при превышении любого из ограничений контрольная точка выполняется, а счетчики, отслеживающие как количество транзакций, так и время, прошедшее с момента последней контрольной точки, сбрасываются.Минимально допустимое значение для этой переменной равно 1, если только сервер не был собран с использованием
-DWITH_DEBUG, в этом случае минимальное значение равно 0. Независимо от того, как был собран сервер, значение по умолчанию равно 300 миллисекундам, а максимально возможное значение равно 4294967295 миллисекундам (примерно 49,7 дня).
-
Формат командной строки --replica-compressed-protocol[={OFF|ON}]Системная переменная replica_compressed_protocolОбласть действия Глобальная Динамическая Да SET_VARПрименяется подсказкаНет Тип Булево Значение по умолчанию OFFreplica_compressed_protocolуказывает, следует ли использовать сжатие протокола соединения источник/реплика, если обе стороны его поддерживают. Если эта переменная отключена (значение по умолчанию), соединения не сжимаются. Изменения этой переменной вступают в силу при последующих попытках подключения; это включает в себя выполнение оператораSTART REPLICA, а также повторные подключения, выполняемые активным потоком репликации I/O (приёмником).Сжатие транзакций журнала бинарных логов, включенное системной переменной
binlog_transaction_compression, также может использоваться для экономии полосы пропускания. Если вы используете сжатие транзакций журнала бинарных логов в сочетании со сжатием протокола, сжатие протокола имеет меньше возможностей для воздействия на данные, но всё равно может сжимать заголовки и те события и данные транзакций, которые не сжаты. Дополнительную информацию о сжатии транзакций журнала бинарных логов см. в разделе 7.4.4.5, «Сжатие транзакций журнала бинарных логов».Если
replica_compressed_protocolвключено, оно имеет приоритет над любымSOURCE_COMPRESSION_ALGORITHMSпараметром, указанным для оператораCHANGE REPLICATION SOURCE TO. В этом случае соединения с источником используютzlibсжатие, если источник и реплика поддерживают этот алгоритм. Еслиreplica_compressed_protocolотключено, применяется значениеSOURCE_COMPRESSION_ALGORITHMS. Дополнительную информацию см. в разделе 6.2.8, «Управление сжатием подключений». -
Формат командной строки --replica-exec-mode=modeСистемная переменная replica_exec_modeОбласть действия Глобальная Динамическая Да SET_VARПрименяется подсказкаНет Тип Перечисление Значение по умолчанию IDEMPOTENT(NDB)STRICT(Другие)Допустимые значения STRICTIDEMPOTENTreplica_exec_modeуправляет тем, как поток репликации разрешает конфликты и ошибки во время репликации. РежимIDEMPOTENTприводит к подавлению ошибок дублирования ключей и отсутствия ключей;STRICTозначает, что такое подавление не происходит.Режим
IDEMPOTENTпредназначен для использования в репликации с несколькими источниками, циклической репликации и некоторых других особых сценариях репликации для NDB Cluster Replication. (См. раздел 25.7.10, «NDB Cluster Replication: Взаимная и циклическая репликация» и раздел 25.7.12, «Разрешение конфликтов в NDB Cluster Replication» для получения дополнительной информации.) NDB Cluster игнорирует любое явно заданное значение дляreplica_exec_modeи всегда рассматривает его какIDEMPOTENT.В MySQL Server 8.4, режим
STRICTявляется значением по умолчанию.Настройка этой переменной вступает в силу сразу для всех каналов репликации, включая активные.
Для других систем хранения, помимо
NDB, режимIDEMPOTENTследует использовать только тогда, когда вы абсолютно уверены, что ошибки дублирования ключей и ошибки отсутствия ключей могут быть безопасно проигнорированы. Он предназначен для использования в сценариях отказоустойчивости для NDB Cluster, где используется репликация с несколькими источниками или циклическая репликация, и не рекомендуется для использования в других случаях. -
Формат командной строки --replica-load-tmpdir=dir_nameСистемная переменная replica_load_tmpdirОбласть действия Глобальная Динамическая Нет SET_VARПрименяется подсказкаНет Тип Имя каталога Значение по умолчанию Value of --tmpdirreplica_load_tmpdirуказывает имя каталога, в котором реплика создаёт временные файлы. Настройка этой переменной вступает в силу сразу для всех каналов репликации, включая активные. Значение переменной по умолчанию равно значению системной переменнойtmpdirили значению по умолчанию, если эта переменная не указана.Когда поток репликации SQL реплицирует оператор
LOAD DATA, он извлекает загружаемый файл из журнала репликации в временные файлы и затем загружает их в таблицу. Если загружаемый на источнике файл большой, то временные файлы на реплике также будут большими. Поэтому рекомендуется использовать этот параметр для указания реплике разместить временные файлы в каталоге на файловой системе с большим объёмом свободного места. В этом случае журналы репликации также будут большими, поэтому вам также может потребоваться установить системную переменнуюrelay_logдля размещения журналов репликации в этой файловой системе.Каталог, указанный в этом параметре, должен находиться в файловой системе на диске (а не в памяти), чтобы временные файлы, используемые для репликации операторов
LOAD DATA, сохранялись после перезагрузки машины. Также каталог не должен очищаться операционной системой при запуске системы. Однако репликация теперь может продолжаться после перезагрузки, если временные файлы были удалены. -
Формат командной строки --replica-max-allowed-packet=#Системная переменная replica_max_allowed_packetОбласть действия Глобальная Динамическая Да SET_VARПрименяется подсказкаНет Тип Целое число Значение по умолчанию 1073741824Минимальное значение 1024Максимальное значение 1073741824Единица измерения байты Размер блока 1024replica_max_allowed_packetустанавливает максимальный размер пакета в байтах, который могут обрабатывать потоки репликации SQL (применитель) и I/O (приёмник). Настройка этой переменной вступает в силу сразу для всех каналов репликации, включая активные. Источник может записать события журнала бинарных логов, длина которых превышает значениеmax_allowed_packetпосле добавления заголовка события. Значениеreplica_max_allowed_packetдолжно быть больше, чем значениеmax_allowed_packetна источнике, чтобы большие обновления, использующие репликацию на основе строк, не приводили к сбою репликации.Эта глобальная переменная всегда имеет значение, которое является положительным целым кратным 1024; если вы задаёте ей значение, которое им не является, оно округляется вниз до ближайшего большего кратного 1024 для хранения или использования; установка
replica_max_allowed_packetв 0 приводит к использованию 1024. (В таких случаях выдаётся предупреждение о усечении.) Значение по умолчанию и максимальное значение равно 1073741824 (1 ГБ); минимальное — 1024.
-
Формат командной строки --replica-net-timeout=#Системная переменная replica_net_timeoutОбласть действия Глобальная Динамическая Да SET_VARПрименяется ли подсказкаНет Тип Целое число Значение по умолчанию 60Минимальное значение 1Максимальное значение 31536000Единица измерения секунды replica_net_timeoutзадаёт количество секунд, которое нужно ждать дополнительных данных или сигнала подтверждения от источника, прежде чем реплика посчитает соединение прерванным, прервёт чтение и попытается повторно подключиться. Изменение этой переменной не приведёт к немедленному эффекту. Состояние переменной применяется ко всем последующим командамSTART REPLICA.Значение по умолчанию составляет 60 секунд (одна минута). Первая попытка повторного подключения происходит сразу после истечения времени ожидания. Интервал между попытками повторного подключения управляется параметром
SOURCE_CONNECT_RETRYоператораCHANGE REPLICATION SOURCE TO, а количество попыток повторного подключения ограничено параметромSOURCE_RETRY_COUNT.Интервал проверки состояния соединения, который предотвращает истечение времени ожидания при отсутствии данных, если соединение по-прежнему активно, управляется параметром
SOURCE_HEARTBEAT_PERIODоператораCHANGE REPLICATION SOURCE TO. Интервал проверки состояния по умолчанию равен половине значенияreplica_net_timeoutи записывается в репозиторий метаданных соединения реплики, отображаясь в таблицеreplication_connection_configurationсхемы производительности. Обратите внимание, что изменение значения или значения по умолчаниюreplica_net_timeoutне приводит к автоматическому изменению интервала проверки состояния, независимо от того, было ли оно установлено явно или вычислялось по умолчанию. При изменении таймаута соединения необходимо также выполнить операторCHANGE REPLICATION SOURCE TOдля корректировки интервала проверки состояния до подходящего значения, чтобы он наступал до истечения времени ожидания соединения. -
Формат командной строки --replica-parallel-type=valueУстаревший Да Системная переменная replica_parallel_typeОбласть действия Глобальная Динамическая Да SET_VARПрименяется ли подсказкаНет Тип Перечисление Значение по умолчанию LOGICAL_CLOCKДопустимые значения DATABASELOGICAL_CLOCKДля многопоточных реплик (реплик, для которых
replica_parallel_workersустановлено значение больше 0),replica_parallel_typeзадаёт политику, используемую для определения транзакций, которые разрешено выполнять параллельно на реплике. Переменная не влияет на реплики, для которых многопоточность не включена. Возможные значения:LOGICAL_CLOCK: Транзакции применяются параллельно на реплике на основе временных меток, которые источник репликации записывает в бинарный журнал. Взаимозависимости между транзакциями отслеживаются на основе временных меток для обеспечения дополнительного распараллеливания, где это возможно.DATABASE: Транзакции, обновляющие разные базы данных, применяются параллельно. Это значение подходит только в том случае, если данные разделены на несколько баз данных, которые обновляются независимо и одновременно на источнике. Не должно быть ограничений между базами данных, так как такие ограничения могут быть нарушены на реплике.
При включении
replica_preserve_commit_order, необходимо использоватьLOGICAL_CLOCK. Многопоточность включена по умолчанию для серверов репликации (replica_parallel_workers=4по умолчанию), иLOGICAL_CLOCKявляется значением по умолчанию. (replica_preserve_commit_orderтакже включено по умолчанию.)При использовании топологии репликации с несколькими уровнями реплик,
LOGICAL_CLOCKможет обеспечивать меньшее распараллеливание для каждого уровня репликации, удалённых от источника.При включении сжатия транзакций бинарного журнала с помощью системной переменной
binlog_transaction_compression, еслиreplica_parallel_typeустановлено в значениеDATABASE, все базы данных, затронутые транзакцией, сопоставляются перед планированием транзакции. Использование сжатия транзакций бинарного журнала с политикойDATABASEможет снизить параллелизм по сравнению с несжатыми транзакциями, которые сопоставляются и планируются для каждого события.replica_parallel_typeустарело, как и поддержка параллелизации транзакций с помощью разбиения баз данных. Ожидайте, что поддержка этих функций будет удалена в будущих версиях, и чтоLOGICAL_CLOCKбудет использоваться исключительно в дальнейшем.
-
Переменная replica_parallel_workers
Формат командной строки --replica-parallel-workers=#Системная переменная replica_parallel_workersОбласть действия Глобальная Динамическая Да SET_VARПрименяется в качестве подсказкиНет Тип Целое число Значение по умолчанию 4Минимальное значение 0Максимальное значение 1024replica_parallel_workersпозволяет использовать многопоточность на реплике и устанавливает количество потоков обработчиков для параллельного выполнения транзакций репликации. Когда значение больше или равно 1, реплика использует указанное количество рабочих потоков для выполнения транзакций плюс координатор, который считывает транзакции из журнала ретрансляции и распределяет их между рабочими потоками. Когда значение равно 0, существует только один поток, который последовательно считывает и применяет транзакции. Если вы используете несколько каналов репликации, значение этой переменной применяется к потокам, используемым каждым каналом.Значение по умолчанию равно 4, что означает, что реплики многопоточны по умолчанию.
Установка этой переменной в 0 устарела, вызывает предупреждение и может быть удалена в будущих выпусках MySQL. Для одного рабочего потока установите
replica_parallel_workersв 1.Когда
replica_preserve_commit_orderравноON(значение по умолчанию), транзакции на реплике внешне выглядят в том же порядке, в каком они появляются в журнале ретрансляции реплики. Способ распределения транзакций между потоками обработчиков определяется переменнойreplica_parallel_type. Эти системные переменные также имеют соответствующие значения по умолчанию для многопоточности.Чтобы отключить параллельное выполнение, установите
replica_parallel_workersв 1. В этом случае реплика использует один координатор, который считывает транзакции, и один рабочий поток, который их применяет, что означает, что транзакции применяются последовательно. Когдаreplica_parallel_workersравно 1, системные переменныеreplica_parallel_typeиreplica_preserve_commit_orderне имеют эффекта и игнорируются. Еслиreplica_parallel_workersравно 0, а опцияCHANGE REPLICATION SOURCE TOсGTID_ONLYвключена, реплика имеет один координатор и один рабочий поток, точно так же, как если быreplica_parallel_workersбыло установлено в 1. При одном рабочем потоке системная переменнаяreplica_preserve_commit_orderтакже не имеет эффекта.Установка
replica_parallel_workersне имеет немедленного эффекта, а применяется ко всем последующим операциямSTART REPLICA.Многопоточные реплики также поддерживаются NDB Cluster 8.4. Дополнительную информацию см. в Разделе 25.7.11, «NDB Cluster Replication Using the Multithreaded Applier».
Увеличение числа рабочих потоков улучшает потенциальную параллельность. Как правило, это улучшает производительность до определенного момента, после которого увеличение числа рабочих потоков снижает производительность из-за таких эффектов конкурентности, как конкуренция за блокировки. Идеальное число зависит как от аппаратного обеспечения, так и от рабочей нагрузки; его трудно предсказать и обычно его нужно определять путем тестирования. Таблицы без первичных ключей, которые всегда ухудшают производительность, могут оказывать еще большее негативное влияние на реплики с
replica_parallel_workers> 1, поэтому убедитесь, что все таблицы имеют первичные ключи перед включением этой опции. -
Формат командной строки --replica-pending-jobs-size-max=#Системная переменная replica_pending_jobs_size_maxОбласть действия Глобальная Динамическая Да SET_VARПрименяется в качестве подсказкиНет Тип Целое число Значение по умолчанию 128MМинимальное значение 1024Максимальное значение 16EiBЕдиница измерения байты Размер блока 1024Для многопоточных реплик эта переменная задает максимальный объем памяти (в байтах), доступный для очередей обработчиков, содержащих события, которые еще не были применены. Установка этой переменной не влияет на реплики, для которых многопоточность не включена. Установка этой переменной не имеет немедленного эффекта. Состояние переменной применяется ко всем последующим командам
START REPLICA.Минимальное возможное значение для этой переменной составляет 1024 байта; значение по умолчанию — 128 МБ. Максимальное возможное значение составляет 18446744073709551615 (16 эксабайт). Значения, которые не являются точными кратными 1024 байтам, округляются вниз до ближайшего меньшего кратного 1024 байт перед сохранением.
Значение этой переменной является мягким ограничением и может быть установлено в соответствии с обычной рабочей нагрузкой. Если необычное большое событие превышает этот размер, транзакция удерживается до тех пор, пока все рабочие потоки не освободят свои очереди, а затем обрабатывается. Все последующие транзакции удерживаются до тех пор, пока не будет завершена большая транзакция.
-
Формат командной строки --replica-preserve-commit-order[={OFF|ON}]Системная переменная replica_preserve_commit_orderОбласть действия Глобальная Динамическая Да SET_VARПрименяется как подсказкаНет Тип Булево Значение по умолчанию ONДля многопоточных реплик (реплик, на которых
replica_parallel_workersустановлено значение больше 0), установкаreplica_preserve_commit_order=ONгарантирует, что транзакции выполняются и подтверждаются на реплике в том же порядке, в котором они появляются в журнале пересылки реплики. Это предотвращает пробелы в последовательности выполненных транзакций из журнала пересылки реплики и сохраняет один и тот же журнал транзакций на реплике, что и на источнике (с ограничениями, перечисленными ниже). Эта переменная не влияет на реплики, для которых многопоточность не включена.Многопоточность по умолчанию включена в MySQL 8.4 для серверов репликации (
replica_parallel_workers=4по умолчанию), поэтомуreplica_preserve_commit_order=ONтакже является значением по умолчанию, и настройкаreplica_parallel_type=LOGICAL_CLOCKтакже является значением по умолчанию. Кроме того, значение дляreplica_preserve_commit_orderигнорируется, еслиreplica_parallel_workersустановлено в 1, так как в этом случае порядок транзакций сохраняется независимо.Для установки
replica_preserve_commit_order=ONне требуется журналирование бинарных данных и журналирование обновлений реплики на реплике, и они могут быть отключены, если нужно. Установкаreplica_preserve_commit_order=ONтребует, чтобыreplica_parallel_typeбыло установлено вLOGICAL_CLOCK, что является значением по умолчанию в MySQL 8.4. Перед изменением значенияreplica_preserve_commit_orderиreplica_parallel_typeнеобходимо остановить поток SQL репликации (для всех каналов репликации, если вы используете несколько каналов репликации).Когда
replica_preserve_commit_order=OFFустановлено, параллельно применяемые транзакции многопоточной реплики могут подтверждаться в случайном порядке. Поэтому проверка последней выполненной транзакции не гарантирует, что все предыдущие транзакции со стороны источника были выполнены на реплике. Существует вероятность пробелов в последовательности транзакций, которые были выполнены из журнала пересылки реплики. Это имеет последствия для ведения журнала и восстановления при использовании многопоточной реплики. Дополнительную информацию см. в разделе Раздел 19.5.1.34, «Несоответствия репликации и транзакций».Когда
replica_preserve_commit_order=ONустановлено, выполняющий поток ожидает, пока все предыдущие транзакции не будут подтверждены перед подтверждением. Пока данный поток ожидает, пока другие потоки не подтвердят свои транзакции, он сообщает свой статус какWaiting for preceding transaction to commit. В этом режиме многопоточная реплика никогда не попадает в состояние, в котором не находился источник. Это поддерживает использование репликации для масштабирования чтения. Дополнительную информацию см. в разделе Раздел 19.4.5, «Использование репликации для масштабирования».Примечаниеreplica_preserve_commit_order=ONне предотвращает отставание позиции бинарного журнала источника, гдеExec_master_log_posотстает от позиции, до которой были выполнены транзакции. Дополнительную информацию см. в разделе Раздел 19.5.1.34, «Несоответствия репликации и транзакций».replica_preserve_commit_order=ONне сохраняет порядок подтверждения и журнал транзакций, если реплика использует фильтры в своём бинарном журнале, например,--binlog-do-db.replica_preserve_commit_order=ONне сохраняет порядок обновлений DML, не являющихся транзакционными. Они могут быть подтверждены до транзакций, предшествующих им в журнале пересылки, что может привести к пробелам в последовательности транзакций, выполненных из журнала пересылки реплики.Ограничение сохранения порядка подтверждения на реплике может возникнуть, если используется репликация на основе операторов, и в не-XA транзакции участвуют как транзакционные, так и не транзакционные движки хранения, которые отменяются на источнике. Обычно не-XA транзакции, которые отменяются на источнике, не реплицируются на реплику, но в этом конкретном случае транзакция может быть реплицирована на реплику. Если это произойдёт, многопоточная реплика без журналирования бинарных данных не обрабатывает отмену транзакции, поэтому порядок подтверждения на реплике отклоняется от порядка транзакций в журнале пересылки в этом случае.
Группа реплик—MySQL 8.4.4 и более поздние версии: Когда первичный сервер группы получает и применяет транзакции из внешнего источника через асинхронный канал и новый член присоединяется к группе,
replica_preserve_commit_order=ONне гарантирует соблюдения порядка подтверждения неконфликтных транзакций. Из-за этого на вторичном сервере могут быть временные состояния, которые никогда не существовали на источнике; поскольку это происходит только в отношении неконфликтных транзакций, фактического расхождения нет.
-
Формат командной строки --replica-sql-verify-checksum[={OFF|ON}]Системная переменная replica_sql_verify_checksumОбласть действия Глобальная Динамическая Да SET_VARПрименяется как подсказкаНет Тип Булево Значение по умолчанию ONreplica_sql_verify_checksumзаставляет поток SQL репликации (применитель) проверять данные с помощью контрольных сумм, считываемых из журнала пересылки. В случае несовпадения реплика останавливается с ошибкой. Настройка этой переменной вступает в силу для всех каналов репликации сразу, включая работающие каналы.ПримечаниеПоток репликации I/O (приёмник) всегда считывает контрольные суммы, если это возможно, при приёме событий из сети.
-
Формат командной строки --replica-transaction-retries=#Системная переменная replica_transaction_retriesОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 10Минимальное значение 0Максимальное значение 18446744073709551615replica_transaction_retriesустанавливает максимальное количество попыток автоматического повтора неудачных транзакций потоками репликации SQL на однопоточной или многопоточной реплике, прежде чем произойдет остановка. Установка этой переменной вступает в силу для всех каналов репликации немедленно, включая запущенные каналы. Значение по умолчанию — 10. Установка переменной в 0 отключает автоматический повтор транзакций.Если поток репликации SQL не может выполнить транзакцию из-за
InnoDBвзаимоблокировки или из-за того, что время выполнения транзакции превысилоInnoDBinnodb_lock_wait_timeoutилиNDBTransactionDeadlockDetectionTimeoutилиTransactionInactiveTimeout, он автоматически повторяет попыткиreplica_transaction_retriesраз, прежде чем остановиться с ошибкой. Транзакции с непостоянными ошибками не повторяются.Таблица Performance Schema
replication_applier_statusпоказывает количество выполненных повторных попыток на каждом канале репликации в столбцеCOUNT_TRANSACTIONS_RETRIES. Таблица Performance Schemareplication_applier_status_by_workerпоказывает подробную информацию о повторных попытках транзакций отдельными потоками приложения на однопоточной или многопоточной реплике и идентифицирует ошибки, которые привели к повторной попытке последней транзакции и транзакции, выполняющейся в данный момент. -
Формат командной строки --replica-type-conversions=setСистемная переменная replica_type_conversionsОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Множество Значение по умолчанию Допустимые значения ALL_LOSSYALL_NON_LOSSYALL_SIGNEDALL_UNSIGNEDreplica_type_conversionsуправляет режимом преобразования типов, действующим на реплике при использовании репликации на основе строк. Его значение представляет собой разделенный запятыми набор из нуля или более элементов из списка:ALL_LOSSY,ALL_NON_LOSSY,ALL_SIGNED,ALL_UNSIGNED. Установите эту переменную в пустую строку, чтобы запретить преобразование типов между источником и репликой. Установка этой переменной вступает в силу для всех каналов репликации немедленно, включая запущенные каналы.Для получения дополнительной информации о режимах преобразования типов, применимых к повышению и понижению уровня атрибутов в репликации на основе строк, см. Репликация на основе строк: повышение и понижение уровня атрибутов.
-
replication_optimize_for_static_plugin_configФормат командной строки --replication-optimize-for-static-plugin-config[={OFF|ON}]Системная переменная replication_optimize_for_static_plugin_configОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Логическое Значение по умолчанию OFFИспользуйте общие блокировки и избегайте ненужных приобретений блокировок, чтобы повысить производительность для полусинхронной репликации. Эта настройка и
replication_sender_observe_commit_onlyпомогают по мере увеличения числа реплик, поскольку конкуренция за блокировки может замедлить производительность. Пока эта системная переменная включена, плагин полусинхронной репликации не может быть удален, поэтому перед удалением необходимо отключить системную переменную.Эту системную переменную можно включить до или после установки плагина полусинхронной репликации, а также можно включить во время работы репликации. Исходные серверы полусинхронной репликации также могут получить преимущества в производительности от включения этой системной переменной, поскольку они используют те же механизмы блокировки, что и реплики.
replication_optimize_for_static_plugin_configможет быть включена, когда на сервере используется групповая репликация. В этом случае она может улучшить производительность при наличии конкуренции за блокировки из-за высоких нагрузок. -
replication_sender_observe_commit_onlyФормат командной строки --replication-sender-observe-commit-only[={OFF|ON}]Системная переменная replication_sender_observe_commit_onlyОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Логическое Значение по умолчанию OFFОграничьте обратные вызовы, чтобы повысить производительность для полусинхронной репликации. Эта настройка и
replication_optimize_for_static_plugin_configпомогают по мере увеличения числа реплик, поскольку конкуренция за блокировки может замедлить производительность.Эту системную переменную можно включить до или после установки плагина полусинхронной репликации, а также можно включить во время работы репликации. Исходные серверы полусинхронной репликации также могут получить преимущества в производительности от включения этой системной переменной, поскольку они используют те же механизмы блокировки, что и реплики.
-
Формат командной строки --report-host=host_nameСистемная переменная report_hostОбласть видимости Глобальная Динамическая Нет SET_VARПодсказка применяетсяНет Тип Строка Имя хоста или IP-адрес реплики, который будет сообщен источнику во время регистрации реплики. Это значение отображается в выводе
SHOW REPLICASна исходном сервере. Оставьте значение не заданным, если вы не хотите, чтобы реплика регистрировалась в источнике.ПримечаниеДля источника недостаточно просто прочитать IP-адрес сервера реплики из сокета TCP/IP после подключения реплики. Из-за NAT и других проблем маршрутизации этот IP-адрес может быть недействительным для подключения к реплике с исходного сервера или других хостов.
-
Формат командной строки --report-password=nameСистемная переменная report_passwordОбласть видимости Глобальная Динамическая Нет SET_VARПодсказка применяетсяНет Тип Строка Пароль учетной записи реплики, который должен быть сообщен источнику во время регистрации реплики. Это значение отображается в выводе
SHOW REPLICASна сервере источника, если источник был запущен с помощью--show-replica-auth-info.Несмотря на то, что название этой переменной может подразумевать обратное,
report_passwordне связана с системой привилегий пользователей MySQL и поэтому не обязательно (и даже маловероятно) совпадает с паролем для учетной записи пользователя репликации MySQL. -
Формат командной строки --report-port=port_numСистемная переменная report_portОбласть видимости Глобальная Динамическая Нет SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию [slave_port]Минимальное значение 0Максимальное значение 65535Номер порта TCP/IP для подключения к реплике, который должен быть сообщен источнику во время регистрации реплики. Установите это значение только в том случае, если реплика прослушивает нестандартный порт или если у вас есть специальный туннель от источника или других клиентов к реплике. Если вы не уверены, не используйте этот параметр.
Значение по умолчанию для этого параметра — это номер порта, фактически используемый репликой. Это также значение по умолчанию, отображаемое командой
SHOW REPLICAS. -
Формат командной строки --report-user=nameСистемная переменная report_userОбласть видимости Глобальная Динамическая Нет SET_VARПодсказка применяетсяНет Тип Строка Имя пользователя учетной записи реплики, которое должно быть сообщено источнику во время регистрации реплики. Это значение отображается в выводе
SHOW REPLICASна сервере источника, если источник был запущен с помощью--show-replica-auth-info.Несмотря на то, что название этой переменной может подразумевать обратное,
report_userне связана с системой привилегий пользователей MySQL и поэтому не обязательно (и даже маловероятно) совпадает с именем учетной записи пользователя репликации MySQL. -
Формат командной строки --rpl-read-size=#Системная переменная rpl_read_sizeОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 8192Минимальное значение 8192Максимальное значение 4294959104Единица измерения байты Размер блока 8192Системная переменная
rpl_read_sizeуправляет минимальным объемом данных в байтах, считываемых из файлов двоичных журналов и файлов ретрансляционных журналов. Если интенсивные операции ввода-вывода на диске для этих файлов замедляют производительность базы данных, увеличение размера чтения может уменьшить количество операций чтения файлов и задержки ввода-вывода, когда данные файла в данный момент не кэшируются операционной системой.Минимальное и значение по умолчанию для
rpl_read_sizeсоставляет 8192 байта. Значение должно быть кратно 4 КБ. Обратите внимание, что буфер размером с это значение выделяется для каждого потока, который считывает данные из файлов двоичных журналов и ретрансляционных журналов, включая потоки дампа на источниках и потоки координаторов на репликах. Поэтому установка большого значения может повлиять на потребление памяти серверами. -
Формат командной строки --rpl-semi-sync-replica-enabled[={OFF|ON}]Системная переменная rpl_semi_sync_replica_enabledОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Булево Значение по умолчанию OFFrpl_semi_sync_replica_enabledуправляет тем, включена ли полусинхронная репликация на сервере реплики. Чтобы включить или отключить плагин, установите эту переменную в значениеONилиOFF(или 1 или 0) соответственно. Значение по умолчанию —OFF.Эта переменная доступна только в том случае, если установлен плагин полусинхронной репликации на стороне реплики.
-
rpl_semi_sync_replica_trace_levelФормат командной строки --rpl-semi-sync-replica-trace-level=#Системная переменная rpl_semi_sync_replica_trace_levelОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 32Минимальное значение 0Максимальное значение 4294967295rpl_semi_sync_replica_trace_levelуправляет уровнем трассировки отладки полусинхронной репликации на сервере реплики. См.rpl_semi_sync_master_trace_levelдля допустимых значений.Эта переменная доступна только в том случае, если установлен плагин полусинхронной репликации на стороне реплики.
-
Формат командной строки --rpl-semi-sync-slave-enabled[={OFF|ON}]Системная переменная rpl_semi_sync_slave_enabledОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Булево Значение по умолчанию OFFУстаревший синоним для
rpl_semi_sync_replica_enabled. -
rpl_semi_sync_slave_trace_levelФормат командной строки --rpl-semi-sync-slave-trace-level=#Системная переменная rpl_semi_sync_slave_trace_levelОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 32Минимальное значение 0Максимальное значение 4294967295Устаревший синоним для
rpl_semi_sync_replica_trace_level.
-
Формат командной строки --rpl-stop-replica-timeout=#Системная переменная rpl_stop_replica_timeoutОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 31536000Минимальное значение 2Максимальное значение 31536000Единица измерения секунды Вы можете управлять длительностью времени (в секундах), в течение которого
STOP REPLICAожидает, прежде чем истечет время ожидания, установив эту переменную. Это может быть использовано для предотвращения взаимных блокировок междуSTOP REPLICAи другими SQL-запросами, использующими разные клиентские соединения с репликой.Максимальное и значение по умолчанию для
rpl_stop_replica_timeoutсоставляет 31536000 секунд (1 год). Минимальное значение — 2 секунды. Изменения в этой переменной вступают в силу для последующихSTOP REPLICAзапросов.Эта переменная влияет только на клиента, который выдает
STOP REPLICAзапрос. Когда время ожидания истекает, клиент, выдавший запрос, возвращает сообщение об ошибке, указывающее на то, что выполнение команды не завершено. Затем клиент прекращает ожидание остановки потоков репликации ввода-вывода (приемника) и SQL (применителя), но потоки репликации продолжают пытаться остановиться, иSTOP REPLICAзапрос остается в силе. Как только потоки репликации перестают быть заняты,STOP REPLICAзапрос выполняется, и реплика останавливается. -
Формат командной строки --rpl-stop-slave-timeout=#Устарело Да Системная переменная rpl_stop_slave_timeoutОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 31536000Минимальное значение 2Максимальное значение 31536000Единица измерения секунды Устаревший синоним для
rpl_stop_replica_timeout. -
Формат командной строки --skip-replica-start[={OFF|ON}]Системная переменная skip_replica_startОбласть видимости Глобальная Динамическая Нет SET_VARПодсказка применяетсяНет Тип Булево Значение по умолчанию OFFskip_replica_startуказывает серверу реплики не запускать потоки репликации ввода-вывода (приемника) и SQL (применителя) при запуске сервера. Чтобы запустить потоки позже, используйтеSTART REPLICAзапрос.Эта системная переменная доступна только для чтения и может быть установлена с помощью ключевого слова
PERSIST_ONLYили квалификатора@@persist_onlyс помощьюSETзапроса. Параметр командной строки--skip-replica-startтакже устанавливает эту системную переменную. Вы можете использовать системную переменную вместо параметра командной строки, чтобы обеспечить доступ к этой функции с помощью структуры привилегий сервера MySQL, чтобы администраторам баз данных не требовался привилегированный доступ к операционной системе. -
Формат командной строки --skip-slave-start[={OFF|ON}]Устарело Да Системная переменная skip_slave_startОбласть видимости Глобальная Динамическая Нет SET_VARПодсказка применяетсяНет Тип Булево Значение по умолчанию OFFУстаревший синоним для
--skip-replica-start. -
Формат командной строки --slave-checkpoint-group=#Устарело Да Системная переменная slave_checkpoint_groupОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 512Минимальное значение 32Максимальное значение 524280Размер блока 8Устаревший синоним для
replica_checkpoint_group. -
Формат командной строки --slave-checkpoint-period=#Устарело Да Системная переменная slave_checkpoint_periodОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 300Минимальное значение 1Максимальное значение 4294967295Единица измерения миллисекунды Устаревший синоним для
replica_checkpoint_period. -
Формат командной строки --slave-compressed-protocol[={OFF|ON}]Устарело Да Системная переменная slave_compressed_protocolОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Булево Значение по умолчанию OFFУстаревший псевдоним для
replica_compressed_protocol. -
Формат командной строки --slave-exec-mode=modeСистемная переменная slave_exec_modeОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Перечисление Значение по умолчанию IDEMPOTENT(NDB)STRICT(Other)Допустимые значения STRICTIDEMPOTENTУстаревший псевдоним для
replica_exec_mode.
-
Формат командной строки --slave-load-tmpdir=dir_nameУстарело Да Системная переменная slave_load_tmpdirОбласть видимости Глобальная Динамическая Нет SET_VARПодсказка применяетсяНет Тип Имя каталога Значение по умолчанию Value of --tmpdirУстаревший псевдоним для
replica_load_tmpdir. -
Формат командной строки --slave-max-allowed-packet=#Устарело Да Системная переменная slave_max_allowed_packetОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 1073741824Минимальное значение 1024Максимальное значение 1073741824Единица измерения байты Размер блока 1024Устаревший псевдоним для
replica_max_allowed_packet. -
Формат командной строки --slave-net-timeout=#Устарело Да Системная переменная slave_net_timeoutОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 60Минимальное значение 1Максимальное значение 31536000Единица измерения секунды Устаревший псевдоним для
replica_net_timeout. -
Формат командной строки --slave-parallel-type=valueУстарело Да Системная переменная slave_parallel_typeОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Перечисление Значение по умолчанию LOGICAL_CLOCKДопустимые значения DATABASELOGICAL_CLOCKУстаревший псевдоним для
replica_parallel_type. -
Формат командной строки --slave-parallel-workers=#Устарело Да Системная переменная slave_parallel_workersОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 4Минимальное значение 0Максимальное значение 1024Устаревший псевдоним для
replica_parallel_workers. -
Формат командной строки --slave-pending-jobs-size-max=#Устарело Да Системная переменная slave_pending_jobs_size_maxОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 128MМинимальное значение 1024Максимальное значение 16EiBЕдиница измерения байты Размер блока 1024Устаревший псевдоним для
replica_pending_jobs_size_max. -
Формат командной строки --slave-preserve-commit-order[={OFF|ON}]Устарело Да Системная переменная slave_preserve_commit_orderОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Логическое Значение по умолчанию ONУстаревший псевдоним для
replica_preserve_commit_order. -
Формат командной строки --slave-skip-errors=nameУстарело Да Системная переменная slave_skip_errorsОбласть видимости Глобальная Динамическая Нет SET_VARПодсказка применяетсяНет Тип Строка Значение по умолчанию OFFДопустимые значения OFF[list of error codes]allddl_exist_errorsУстаревший псевдоним для
replica_skip_errors. -
Формат командной строки --replica-skip-errors=nameСистемная переменная replica_skip_errorsОбласть видимости Глобальная Динамическая Нет SET_VARПодсказка применяетсяНет Тип Строка Значение по умолчанию OFFДопустимые значения OFF[list of error codes]allddl_exist_errorsОбычно репликация останавливается, когда на реплике возникает ошибка, что дает вам возможность вручную устранить несоответствие в данных. Эта переменная заставляет поток SQL репликации продолжать репликацию, когда оператор возвращает любую из ошибок, указанных в значении переменной.
-
Формат командной строки --slave-sql-verify-checksum[={OFF|ON}]Устарело Да Системная переменная slave_sql_verify_checksumОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Булево Значение по умолчанию ONУстаревший псевдоним для
replica_sql_verify_checksum. -
Формат командной строки --slave-transaction-retries=#Устарело Да Системная переменная slave_transaction_retriesОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 10Минимальное значение 0Максимальное значение (64-битные платформы) 18446744073709551615Максимальное значение (32-битные платформы) 4294967295Устаревший псевдоним для
replica_transaction_retries. -
Формат командной строки --slave-type-conversions=setУстарело Да Системная переменная slave_type_conversionsОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Множество Значение по умолчанию Допустимые значения ALL_LOSSYALL_NON_LOSSYALL_SIGNEDALL_UNSIGNEDУстаревший псевдоним для
replica_type_conversions. -
Системная переменная sql_replica_skip_counterОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 0Минимальное значение 0Максимальное значение 4294967295sql_replica_skip_counterуказывает количество событий из источника, которые реплика должна пропустить. Установка параметра не оказывает немедленного действия. Переменная применяется к следующему операторуSTART REPLICA; следующий операторSTART REPLICAтакже возвращает значение к 0. Когда эта переменная установлена в ненулевое значение и настроено несколько каналов репликации, операторSTART REPLICAможет использоваться только с предложениемFOR CHANNEL.channelЭтот параметр несовместим с репликацией на основе GTID и не должен устанавливаться в ненулевое значение, когда установлена
gtid_mode=ON. Если вам нужно пропустить транзакции при использовании GTID, используйте вместо этогоgtid_executedиз источника. Если вы включили назначение GTID на канале репликации, используя параметрASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONSоператораCHANGE REPLICATION SOURCE TO, доступенsql_replica_skip_counter. См. Раздел 19.1.7.3, «Пропуск транзакций».ВажноЕсли пропуск количества событий, указанных при установке этой переменной, приведет к тому, что реплика начнет работу в середине группы событий, реплика продолжит пропускать события, пока не найдет начало следующей группы событий, и начнет работу с этого момента. Для получения дополнительной информации см. Раздел 19.1.7.3, «Пропуск транзакций».
-
Устарело Да Системная переменная sql_slave_skip_counterОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 0Минимальное значение 0Максимальное значение 4294967295Устаревший псевдоним для
sql_replica_skip_counter. -
Формат командной строки --sync-master-info=#Устарело Да Системная переменная sync_master_infoОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 10000Минимальное значение 0Максимальное значение 4294967295Устаревший псевдоним для
sync_source_info. -
Формат командной строки --sync-relay-log=#Системная переменная sync_relay_logОбласть видимости Глобальная Динамическая Да SET_VARПодсказка применяетсяНет Тип Целое число Значение по умолчанию 10000Минимальное значение 0Максимальное значение 4294967295Если значение этой переменной больше 0, сервер MySQL синхронизирует свой релейный журнал с диском (используя
fdatasync()) после записи каждогоsync_relay_logсобытия в релейный журнал. Установка этой переменной вступает в силу для всех каналов репликации немедленно, включая запущенные каналы.Установка
sync_relay_logв 0 приводит к тому, что синхронизация с диском не выполняется; в этом случае сервер полагается на операционную систему для периодической очистки содержимого релейного журнала, как и для любого другого файла.Значение 1 является наиболее безопасным выбором, поскольку в случае неожиданной остановки вы теряете максимум одно событие из релейного журнала. Однако это также самый медленный вариант (если у диска нет резервного питания кэша, что делает синхронизацию очень быстрой). Информацию о сочетании параметров на реплике, которая наиболее устойчива к неожиданным остановкам, см. в Разделе 19.4.2, «Обработка неожиданной остановки реплики».
-
Формат командной строки --sync-relay-log-info=#Устаревший Да Переменная системы sync_relay_log_infoОбласть действия Глобальная Динамический Да SET_VARПрименимоНет Тип Целое число Значение по умолчанию 10000Минимальное значение 0Максимальное значение 4294967295Количество транзакций после которого репликация обновляет хранилище метаданных приложения. Когда хранилище метаданных приложения хранится в виде таблицы
InnoDB(по умолчанию), оно обновляется после каждой транзакции, и эта переменная системы игнорируется. Если хранилище метаданных приложения хранится в файле (устарело), реплика синхронизирует свой файлrelay-log.infoна диск (с использованиемfdatasync()) после указанного количества транзакций. Значение0(ноль) означает, что содержимое файла сбрасывается в операционную систему только. Изменение этой переменной вступает в силу для всех каналов репликации немедленно, включая работающие каналы.Поскольку хранение метаданных приложения в файле устарело, эта переменная также устарела, и сервер выводит предупреждение всякий раз, когда вы её устанавливаете или считываете её значение. Вы должны ожидать, что
sync_relay_log_infoбудет удалена в будущей версии MySQL, и перенесите приложения, которые могут зависеть от неё. -
Формат командной строки --sync-source-info=#Переменная системы sync_source_infoОбласть действия Глобальная Динамический Да SET_VARПрименимоНет Тип Целое число Значение по умолчанию 10000Минимальное значение 0Максимальное значение 4294967295sync_source_infoопределяет количество событий после которого реплика обновляет хранилище метаданных подключения. Когда хранилище метаданных подключения хранится в виде таблицыInnoDB(по умолчанию), оно обновляется после указанного количества событий. Если хранилище метаданных подключения хранится в файле (устарело), реплика синхронизирует свой файлmaster.infoна диск (с использованиемfdatasync()) после указанного количества событий. Значение по умолчанию равно 10000, а значение нуль означает, что хранилище никогда не обновляется. Изменение этой переменной вступает в силу для всех каналов репликации немедленно, включая работающие каналы. -
Формат командной строки --terminology-use-previous=#Переменная системы terminology_use_previousОбласть действия Глобальная, Сеанс Динамический Да SET_VARПрименимоНет Тип Перечисление Значение по умолчанию NONEДопустимые значения NONEBEFORE_8_0_26BEFORE_8_2_0В MySQL 8.0 были внесены несовместимые изменения в имена инструментов, содержащие термины
master,slaveиmts(для “Многопоточного раба”), которые были соответственно изменены наsource,replicaиmta(для “Многопоточного обработчика”). Если эти несовместимые изменения повлияли на ваши приложения, установитеterminology_use_previousвBEFORE_8_0_26, чтобы заставить сервер MySQL использовать старые версии имен для объектов, указанных в предыдущем списке. Это позволит инструментам мониторинга, которые полагаются на старые имена, продолжить работу, пока они не будут обновлены для использования новых имён.MySQL 8.4 обычно отображает
REPLICA_SIDE_DISABLEDвместоSLAVESIDE_DISABLEDв выводеSHOW CREATE EVENT,SHOW EVENTSи запросов к таблице схемы информацииEVENTS. Вы можете заставить отображатьсяSLAVESIDE_DISABLED, установивterminology_use_previousвBEFORE_8_0_26илиBEFORE_8_2_0.Установите переменную системы
terminology_use_previousсо сферой действия сеанса для поддержки отдельных пользователей или со сферой действия глобально, чтобы сделать её значение по умолчанию для всех новых сеансов. Когда используется глобальная область действия, журнал медленных запросов содержит старые версии имён.Влияющие имена инструментов представлены в следующем списке. Переменная системы
terminology_use_previousвлияет только на эти элементы. Она не влияет на новые псевдонимы для переменных системы, переменных состояния и командной строки, которые также были представлены в MySQL 8.0, и они всё ещё могут использоваться, когда она включена.Оснащённые блокировки (мьютексы), видимые в таблицах схемы производительности
mutex_instancesиevents_waits_*с префиксомwait/synch/mutex/Блокировки чтения/записи, видимые в таблицах схемы производительности
rwlock_instancesиevents_waits_*с префиксомwait/synch/rwlock/Оснащённые условные переменные, видимые в таблицах схемы производительности
cond_instancesиevents_waits_*с префиксомwait/synch/cond/Оснащённые выделения памяти, видимые в таблицах схемы производительности
memory_summary_*с префиксомmemory/sql/Имена потоков, видимые в таблице схемы производительности
threadsс префиксомthread/sql/Этапы потоков, видимые в таблицах схемы производительности
events_stages_*с префиксомstage/sql/, и без префикса в таблицах схемы производительностиthreadsиprocesslist, выводе из заявленияSHOW PROCESSLIST, таблице схемы информацииprocesslistи журнале медленных запросовКоманды потоков, видимые в таблицах схемы производительности
events_statements_history*иevents_statements_summary_*_by_event_nameс префиксомstatement/com/, и без префикса в таблицах схемы производительностиthreadsиprocesslist, выводе из заявленияSHOW PROCESSLIST, таблице схемы информацииprocesslistи выводе из заявленияSHOW REPLICA STATUS
© 2025 Oracle
Licensed under the GPLv2 License.