Spec-Zone.ru › MySQL 9.2

19.2.5.4 Фильтры репликации, основанные на каналах

В этом разделе объясняется работа с фильтрами репликации при наличии нескольких каналов репликации, например, в топологии репликации с несколькими источниками. Фильтры репликации могут быть глобальными или специфичными для канала, что позволяет настроить реплики с несколькими источниками с фильтрами репликации на конкретных каналах репликации. Фильтры репликации, специфичные для канала, особенно полезны в топологии репликации с несколькими источниками, когда одна и та же база данных или таблица присутствуют на нескольких источниках, а реплике требуется копировать ее только с одного источника.

Инструкции по настройке каналов репликации см. в разделе 19.1.5 «MySQL Multi-Source Replication», а более подробную информацию о их работе см. в разделе 19.2.2 «Каналы репликации».

Важно

Каждый канал на реплике с несколькими источниками должен копировать данные с другого источника. Нельзя настроить несколько каналов репликации с одной реплики на один источник, даже если вы используете фильтры репликации для выбора различных данных для копирования в каждом канале. Это связано с тем, что идентификаторы серверов реплик должны быть уникальными в топологии репликации. Источник различает реплики только по их идентификаторам серверов, а не по именам каналов репликации, поэтому он не может распознать разные каналы репликации с одной и той же реплики.

Важно

На экземпляре сервера MySQL, настроенном для Group Replication, фильтры репликации, специфичные для канала, могут использоваться на каналах репликации, которые не участвуют непосредственно в Group Replication, например, когда член группы также выступает в качестве реплики для источника, находящегося вне группы. Они не могут использоваться на каналах group_replication_applier или group_replication_recovery. Фильтрация на этих каналах сделает невозможным для группы достижение согласованного состояния.

Важно

Для реплики с несколькими источниками в топологии «ромб» (где реплика копирует данные с двух или более источников, которые в свою очередь копируют данные с общего источника), при использовании репликации на основе GTID, убедитесь, что все фильтры репликации и другие настройки канала идентичны во всех каналах реплики с несколькими источниками. При репликации на основе GTID фильтры применяются только к данным транзакций, а GTID не отфильтровываются. Это делается для того, чтобы набор GTID реплики оставался согласованным с набором GTID источника, что означает, что можно использовать автоматическое позиционирование GTID без повторного получения отфильтрованных транзакций каждый раз. В случае, когда реплика на нижнем уровне имеет несколько источников и получает одну и ту же транзакцию с нескольких источников в топологии «ромб», реплика на нижнем уровне теперь имеет несколько версий транзакции, а результат зависит от того, какой канал применит транзакцию первым. Второй канал, пытающийся это сделать, пропускает транзакцию с помощью автоматического пропуска GTID, потому что GTID транзакции был добавлен в набор gtid_executed первым каналом. При одинаковой фильтрации в каналах проблем нет, так как все версии транзакции содержат одни и те же данные, поэтому результаты одинаковы. Однако при различной фильтрации в каналах база данных может стать несогласованной, и репликация может зависнуть.

Обзор фильтров репликации и каналов

При наличии нескольких каналов репликации, например, в топологии репликации с несколькими источниками, фильтры репликации применяются следующим образом:

  • Любой указанный глобальный фильтр репликации добавляется к глобальным фильтрам репликации типа фильтра (do_db, do_ignore_table и так далее).

  • Любой фильтр репликации, специфичный для канала, добавляет фильтр к фильтрам репликации указанного канала для указанного типа фильтра.

  • Каждый канал копирует глобальные фильтры репликации в свои специфичные для канала фильтры репликации, если не настроен специфичный для канала фильтр данного типа.

  • Каждый канал использует свои специфичные для канала фильтры репликации для фильтрации потока репликации.

Синтаксис создания фильтров репликации, специфичных для канала, расширяет существующие SQL-запросы и командные параметры. Когда канал репликации не указан, глобальный фильтр репликации настраивается для обеспечения обратной совместимости. Запрос CHANGE REPLICATION FILTER поддерживает условие FOR CHANNEL для настройки онлайн-фильтров, специфичных для канала. Командные параметры --replicate-* для настройки фильтров могут указывать канал репликации в формате --replicate-filter_type=channel_name:filter_details. Предположим, что каналы channel_1 и channel_2 существуют до запуска сервера; в этом случае запуск реплики с командными параметрами --replicate-do-db=db1 --replicate-do-db=channel_1:db2 --replicate-do-db=db3 --replicate-ignore-db=db4 --replicate-ignore-db=channel_2:db5 --replicate-wild-do-table=channel_1:db6.t1% приведет к:

  • Глобальные фильтры репликации: do_db=db1,db3; ignore_db=db4

  • Фильтры, специфичные для канала channel_1: do_db=db2; ignore_db=db4; wild-do-table=db6.t1%

  • Фильтры, специфичные для канала channel_2: do_db=db1,db3; ignore_db=db5

Те же правила можно применить при запуске, включив их в файл my.cnf реплики, например так:

replicate-do-db=db1
replicate-do-db=channel_1:db2
replicate-ignore-db=db4
replicate-ignore-db=channel_2:db5
replicate-wild-do-table=db6.channel_1.t1%

Для мониторинга фильтров репликации в такой настройке используйте таблицы replication_applier_global_filters и replication_applier_filters.

Настройка фильтров репликации, специфичных для канала, при запуске

Командные параметры, относящиеся к фильтрам репликации, могут принимать необязательный параметр channel, за которым следует двоеточие, а затем спецификация фильтра. Первое двоеточие интерпретируется как разделитель, последующие двоеточия интерпретируются как буквальные двоеточия. Следующие командные параметры поддерживают фильтры репликации, специфичные для канала, с использованием этого формата:

  • --replicate-do-db=channel:database_id

  • --replicate-ignore-db=channel:database_id

  • --replicate-do-table=channel:table_id

  • --replicate-ignore-table=channel:table_id

  • --replicate-rewrite-db=channel:db1-db2

  • --replicate-wild-do-table=channel:table pattern

  • --replicate-wild-ignore-table=channel:table pattern

Все перечисленные параметры могут использоваться в файле my.cnf реплики, как и большинство других параметров запуска сервера MySQL, опуская две ведущие дефисы. См. Обзор фильтров репликации и каналов, для краткого примера, а также раздел 6.2.2.2 «Использование файлов конфигурации».

Если вы используете двоеточие, но не указываете channel для параметра фильтра, например --replicate-do-db=:database_id, параметр настраивает фильтр репликации для канала репликации по умолчанию. Канал репликации по умолчанию — это канал репликации, который всегда существует после запуска репликации, и отличается от каналов репликации с несколькими источниками, которые вы создаете вручную. Если не указано ни двоеточие, ни channel, параметр настраивает глобальные фильтры репликации, например, --replicate-do-db=database_id настраивает глобальный фильтр --replicate-do-db.

Если вы настраиваете несколько параметров rewrite-db=from_name->to_name с одной и той же базой данных from_name, все фильтры добавляются вместе (помещаются в список rewrite_do), и первый из них вступает в силу.

pattern, используемые для параметров --replicate-wild-*-table, могут включать любые символы, разрешенные в идентификаторах, а также маски % и _. Они работают так же, как и при использовании с оператором LIKE; например, tbl% соответствует любому имени таблицы, начинающемуся с tbl, а tbl_ соответствует любому имени таблицы, соответствующему tbl плюс одному дополнительному символу.

END_OF_DOCUMENT_MARKER
Изменение онлайн-фильтров репликации, специфичных для канала

Помимо вариантов --replicate-*, фильтры репликации можно настроить с помощью оператора CHANGE REPLICATION FILTER. Это позволяет избежать перезапуска сервера, но при этом поток SQL репликации должен быть остановлен во время внесения изменений. Для применения фильтра к определенному каналу используйте предложение FOR CHANNEL channel. Например:

CHANGE REPLICATION FILTER REPLICATE_DO_DB=(db1) FOR CHANNEL channel_1;

При указании предложения FOR CHANNEL, оператор действует на фильтры репликации указанного канала. Если указано несколько типов фильтров (do_db, do_ignore_table, wild_do_table и т. д.), оператор заменяет только указанные типы фильтров. В топологии репликации с несколькими каналами, например, на реплике с несколькими источниками, при отсутствии предложения FOR CHANNEL, оператор действует на глобальные фильтры репликации и фильтры репликации всех каналов, используя логику, аналогичную случаю FOR CHANNEL. Дополнительную информацию см. в разделе 15.4.2.1 «Оператор CHANGE REPLICATION FILTER».

Удаление фильтров репликации, специфичных для канала

После настройки фильтров репликации, специфичных для канала, вы можете удалить фильтр, выполнив оператор с пустым типом фильтра. Например, чтобы удалить все фильтры REPLICATE_REWRITE_DB из канала репликации с именем channel_1, выполните:

CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB=() FOR CHANNEL channel_1;

Любые ранее настроенные фильтры REPLICATE_REWRITE_DB, используя либо параметры команд, либо CHANGE REPLICATION FILTER, будут удалены.

Оператор RESET REPLICA ALL удаляет фильтры репликации, специфичные для канала, которые были установлены на каналах, удаленных данным оператором. При повторном создании удаленных каналов все глобальные фильтры репликации, указанные для реплики, копируются на них, и никакие специфичные для канала фильтры репликации не применяются.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/replication-rules-channel-based-filters.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API