Spec-Zone.ru › MySQL 5.7

13.4.2.2 Заявление CHANGE REPLICATION FILTER

CHANGE REPLICATION FILTER filter[, filter][, ...]

filter: {
    REPLICATE_DO_DB = (db_list)
  | REPLICATE_IGNORE_DB = (db_list)
  | REPLICATE_DO_TABLE = (tbl_list)
  | REPLICATE_IGNORE_TABLE = (tbl_list)
  | REPLICATE_WILD_DO_TABLE = (wild_tbl_list)
  | REPLICATE_WILD_IGNORE_TABLE = (wild_tbl_list)
  | REPLICATE_REWRITE_DB = (db_pair_list)
}

db_list:
    db_name[, db_name][, ...]

tbl_list:
    db_name.table_name[, db_table_name][, ...]
wild_tbl_list:
    'db_pattern.table_pattern'[, 'db_pattern.table_pattern'][, ...]

db_pair_list:
    (db_pair)[, (db_pair)][, ...]

db_pair:
    from_db, to_db

CHANGE REPLICATION FILTER устанавливает одну или несколько правил фильтрации репликации на реплике таким же образом, как запуск реплики mysqld с параметрами фильтрации репликации, такими как --replicate-do-db или --replicate-wild-ignore-table. Фильтры, установленные с помощью этого оператора, отличаются от фильтров, установленных с помощью параметров сервера в двух ключевых аспектах:

  1. Для вступления в силу оператора не требуется перезапуск сервера, требуется только, чтобы поток SQL репликации был остановлен с помощью STOP SLAVE SQL_THREAD в первую очередь (и перезапущен с помощью START SLAVE SQL_THREAD после этого).

  2. Эффекты оператора не сохраняются; любые фильтры, установленные с помощью CHANGE REPLICATION FILTER, теряются после перезапуска реплики mysqld.

CHANGE REPLICATION FILTER требует привилегии SUPER.

Примечание

Фильтры репликации не могут быть установлены на экземпляре MySQL-сервера, настроенном для Group Replication, поскольку фильтрация транзакций на некоторых серверах сделает группу неспособной достичь соглашения об согласованном состоянии.

Следующий список показывает CHANGE REPLICATION FILTER параметры и то, как они соотносятся с --replicate-* параметрами сервера:

  • REPLICATE_DO_DB: Включить обновления на основе имени базы данных. Эквивалентно --replicate-do-db.

  • REPLICATE_IGNORE_DB: Исключить обновления на основе имени базы данных. Эквивалентно --replicate-ignore-db.

  • REPLICATE_DO_TABLE: Включить обновления на основе имени таблицы. Эквивалентно --replicate-do-table.

  • REPLICATE_IGNORE_TABLE: Исключить обновления на основе имени таблицы. Эквивалентно --replicate-ignore-table.

  • REPLICATE_WILD_DO_TABLE: Включить обновления на основе подстановочных знаков для сопоставления имени таблицы. Эквивалентно --replicate-wild-do-table.

  • REPLICATE_WILD_IGNORE_TABLE: Исключить обновления на основе подстановочных знаков для сопоставления имени таблицы. Эквивалентно --replicate-wild-ignore-table.

  • REPLICATE_REWRITE_DB: Выполнить обновления на реплике после замены нового имени на реплике указанной базы данных на источнике. Эквивалентно --replicate-rewrite-db.

Точные эффекты REPLICATE_DO_DB и REPLICATE_IGNORE_DB фильтров зависят от того, включена ли репликация на основе операторов или на основе строк. Дополнительную информацию см. в разделе 16.2.5, «Как серверы оценивают правила фильтрации репликации».

Несколько правил фильтрации репликации можно создать в одном операторе CHANGE REPLICATION FILTER, разделив правила запятыми, как показано здесь:

CHANGE REPLICATION FILTER
    REPLICATE_DO_DB = (d1), REPLICATE_IGNORE_DB = (d2);

Выполнение только что показанного оператора эквивалентно запуску реплики mysqld с параметрами --replicate-do-db=d1 --replicate-ignore-db=d2.

Если одно и то же правило фильтрации указано несколько раз, используется только последнее такое правило. Например, два приведенных здесь оператора имеют совершенно одинаковый эффект, потому что первое REPLICATE_DO_DB правило в первом операторе игнорируется:

CHANGE REPLICATION FILTER
    REPLICATE_DO_DB = (db1, db2), REPLICATE_DO_DB = (db3, db4);

CHANGE REPLICATION FILTER
    REPLICATE_DO_DB = (db3,db4);
Внимание

Это поведение отличается от поведения --replicate-* параметров фильтра, где указание одного и того же параметра несколько раз приводит к созданию нескольких правил фильтрации.

Имена таблиц и баз данных, не содержащие специальных символов, не нуждаются в кавычках. Значения, используемые с REPLICATION_WILD_TABLE и REPLICATION_WILD_IGNORE_TABLE, являются строковыми выражениями, которые могут содержать (специальные) символы подстановки, поэтому они должны быть заключены в кавычки. Это показано в следующих примерах операторов:

CHANGE REPLICATION FILTER
    REPLICATE_WILD_DO_TABLE = ('db1.old%');

CHANGE REPLICATION FILTER
    REPLICATE_WILD_IGNORE_TABLE = ('db1.new%', 'db2.new%');

Значения, используемые с REPLICATE_REWRITE_DB, представляют пары имен баз данных; каждое такое значение должно быть заключено в скобки. Следующий оператор переписывает операторы, происходящие в базе данных db1 на источнике в базу данных db2 на реплике:

CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB = ((db1, db2));

Только что показанный оператор содержит две пары скобок, одна из которых заключает пару имен баз данных, а другая — весь список. Это, возможно, легче увидеть в следующем примере, который создает два rewrite-db правила, одно из которых переписывает базу данных dbA в dbB, а другое — базу данных dbC в dbD:

CHANGE REPLICATION FILTER
  REPLICATE_REWRITE_DB = ((dbA, dbB), (dbC, dbD));

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

CHANGE REPLICATION FILTER
    REPLICATE_DO_DB = (), REPLICATE_IGNORE_DB = ();

Установка фильтра в пустое значение таким образом удаляет все существующие правила, не создает новых и не восстанавливает никакие правила, установленные при запуске mysqld с помощью --replicate-* параметров в командной строке или в файле конфигурации.

Значения, используемые с REPLICATE_WILD_DO_TABLE и REPLICATE_WILD_IGNORE_TABLE, должны быть в формате db_name.tbl_name. До MySQL 5.7.5 это не было строго выполнено, хотя использование несовместимых значений с этими параметрами может привести к ошибочным результатам (Ошибка #18095449).

Дополнительную информацию см. в разделе 16.2.5, «Как серверы оценивают правила фильтрации репликации».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/change-replication-filter.html

Spec-Zone.ru

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