Фильтры репликации
Термины master и slave исторически использовались в репликации, но сейчас предпочтительны термины primary и replica. Старые термины всё ещё используются в некоторых частях документации и в командах MariaDB, хотя MariaDB 10.5 начала процесс переименования. Процесс документирования продолжается. Следите за прогрессом этого проекта на MDEV-18777.
Фильтры репликации позволяют пользователям настроить реплики для преднамеренного пропуска определённых событий.
Фильтры двоичного журнала для реплицирующих серверов
MariaDB предоставляет параметры, которые могут быть использованы на первичном реплицирующем сервере для ограничения локальных изменений в определённых базах данных, записываемых в двоичный журнал, что также определяет, будут ли эти изменения реплицироваться репликами.
Параметры фильтра двоичного журнала
Доступны следующие параметры, и они оцениваются в порядке их перечисления ниже. Если есть конфликтующие настройки, приоритет имеет binlog_do_db. До MariaDB 11.2.0 они доступны только как параметры; начиная с MariaDB 11.2.0, они также доступны как системные переменные.
binlog_do_db
Параметр binlog_do_db позволяет настроить первичный реплицирующий сервер на запись в свой двоичный журнал инструкций и транзакций, затрагивающих базы данных, соответствующие указанному имени. Поскольку отфильтрованные инструкции или транзакции не будут присутствовать в двоичном журнале, их реплики не смогут их реплицировать.
Этот параметр не работает с обновлениями между базами данных при использовании журналирования на основе инструкций. Дополнительную информацию см. в разделе Журналирование на основе инструкций.
Этот параметр не может быть изменён динамически.
При установке в командной строке или в группе параметров сервера в файле параметров, параметр не принимает список, разделённый запятыми. Если вы хотите указать несколько фильтров, то нужно указать параметр несколько раз. Например:
[mariadb] ... binlog_do_db=db1 binlog_do_db=db2
Это укажет первичному серверу выполнить следующее:
- Записать в двоичный журнал инструкции и транзакции, затрагивающие базу данных под названием db1.
- Записать в двоичный журнал инструкции и транзакции, затрагивающие базу данных под названием db2.
- Не записывать в двоичный журнал инструкции и транзакции, затрагивающие любые другие базы данных.
binlog_ignore_db
Параметр binlog_ignore_db позволяет настроить первичный реплицирующий сервер на не запись в двоичный журнал инструкций и транзакций, затрагивающих базы данных, соответствующие указанному имени. Поскольку отфильтрованные инструкции или транзакции не будут присутствовать в двоичном журнале, их реплики не смогут их реплицировать.
Этот параметр не работает с обновлениями между базами данных при использовании журналирования на основе инструкций. Дополнительную информацию см. в разделе Журналирование на основе инструкций.
Этот параметр не может быть изменён динамически.
При установке в командной строке или в группе параметров сервера в файле параметров, параметр не принимает список, разделённый запятыми. Если вы хотите указать несколько фильтров, то нужно указать параметр несколько раз. Например:
[mariadb] ... binlog_ignore_db=db1 binlog_ignore_db=db2
Это укажет первичному серверу выполнить следующее:
- Не записывать в двоичный журнал инструкции и транзакции, затрагивающие базу данных под названием db1.
- Не записывать в двоичный журнал инструкции и транзакции, затрагивающие базу данных под названием db2.
- Записывать в двоичный журнал инструкции и транзакции, затрагивающие любые другие базы данных.
Параметр binlog_ignore_db фактически игнорируется, если установлен параметр binlog_do_db, поэтому эти два параметра не следует устанавливать одновременно.
Фильтры репликации для реплик
MariaDB предоставляет параметры и системные переменные, которые могут быть использованы на репликах для фильтрации событий, реплицированных из двоичного журнала.
Параметры фильтра репликации
Доступны следующие параметры и системные переменные, и они оцениваются в порядке их перечисления ниже. При конфликте настроек приоритет имеет соответствующий параметр replicate_do_.
replicate_rewrite_db
Параметр replicate_rewrite_db (и, начиная с MariaDB 10.11, системная переменная) позволяет настроить реплику на переписывание имён баз данных. Он использует формат primary_database->replica_database. Если реплика встречает событие двоичного журнала, в котором базой данных по умолчанию (то есть той, которая выбрана инструкцией USE) является primary_database, то реплика применит событие в replica_database вместо этого.
Этот параметр не работает с обновлениями между базами данных при использовании журналирования на основе инструкций. Дополнительную информацию см. в разделе Журналирование на основе инструкций.
Этот параметр влияет только на инструкции, связанные с таблицами. Он не влияет на инструкции, связанные с самой базой данных, такие как CREATE DATABASE, ALTER DATABASE и DROP DATABASE.
Переписывания по этому параметру оцениваются до любого другого фильтра репликации, настроенного системными переменными replicate_*.
Инструкции, использующие имена таблиц, квалифицированные именами баз данных, не работают с другими фильтрами репликации, такими как replicate_do_table.
До MariaDB 10.11 этот параметр нельзя было устанавливать динамически.
При установке в командной строке или в группе параметров сервера в файле параметров, параметр не принимает список, разделённый запятыми. Если вы хотите указать несколько фильтров, то нужно указать параметр несколько раз. Например:
[mariadb] ... replicate_rewrite_db=db1->db3 replicate_rewrite_db=db2->db4
Это укажет реплике выполнить следующее:
- Если встречается событие двоичного журнала, в котором базой данных по умолчанию была db1, то применить событие в db3 вместо этого.
- Если встречается событие двоичного журнала, в котором базой данных по умолчанию была db2, то применить событие в db4 вместо этого.
См. Настройка параметров фильтра репликации с многоисточниковой репликацией, чтобы узнать, как настроить эту системную переменную с многоисточниковой репликацией.
replicate_do_db
Системная переменная replicate_do_db позволяет настроить реплику на применение инструкций и транзакций, затрагивающих базы данных, соответствующие указанному имени.
Эта системная переменная не работает с обновлениями между базами данных при использовании журналирования на основе инструкций или при использовании смешанного журналирования и инструкции, записанной на основе инструкций. Для репликации на основе инструкций рассматривается только база данных по умолчанию (то есть та, которая выбрана с помощью инструкции USE), а не любые явно указанные таблицы в запросе. Дополнительную информацию см. в разделе Журналирование на основе инструкций.
При динамическом установлении с помощью SET GLOBAL системная переменная принимает список фильтров, разделённых запятыми.
При динамическом установлении невозможно указать имена баз данных, содержащие запятые. Если вам нужно указать имена баз данных, содержащие запятые, нужно использовать параметры командной строки или настроить их в группе параметров сервера в файле параметров при запуске сервера.
При динамическом установлении необходимо остановить потоки репликации. Например:
STOP SLAVE; SET GLOBAL replicate_do_db='db1,db2'; START SLAVE;
При установке в командной строке или в группе параметров сервера в файле параметров, системная переменная не принимает список, разделённый запятыми. Если вы хотите указать несколько фильтров, то нужно указать системную переменную несколько раз. Например:
[mariadb] ... replicate_do_db=db1 replicate_do_db=db2
Это укажет реплике выполнить следующее:
- Реплицировать инструкции и транзакции, затрагивающие базу данных под названием db1.
- Реплицировать инструкции и транзакции, затрагивающие базу данных под названием db2.
- Игнорировать инструкции и транзакции, затрагивающие любые другие базы данных.
См. Настройка параметров фильтра репликации с многоисточниковой репликацией, чтобы узнать, как настроить эту системную переменную с многоисточниковой репликацией.
replicate_ignore_db
Системная переменная replicate_ignore_db позволяет настроить реплику для игнорирования инструкций и транзакций, затрагивающих базы данных, соответствующие заданному имени.
Эта системная переменная не будет работать с межбазовыми обновлениями с логированием на основе инструкций или при использовании смешанного логирования и инструкция записывается на основе инструкции. Для репликации на основе инструкций учитывается только база данных по умолчанию (то есть выбранная с помощью USE), а не любые явно указанные таблицы в запросе. Дополнительная информация представлена в разделе Логирование на основе инструкций.
При динамической настройке с помощью SET GLOBAL, системная переменная принимает список фильтров, разделенный запятыми.
При динамической настройке невозможно указать имена баз данных, содержащие запятые. Если вам нужно указать имена или шаблоны, содержащие запятые, необходимо указать их, либо предоставив параметры командной строки, либо настроив их в группе опций сервера группа опций в файле опций файл опций во время запуска сервера запуск.
При динамической настройке потоки репликации должны быть остановлены. Например:
STOP SLAVE; SET GLOBAL replicate_ignore_db='db1,db2'; START SLAVE;
При настройке в командной строке или в группе опций сервера группа опций в файле опций файл опций системная переменная не принимает список, разделенный запятыми. Если вы хотите указать несколько фильтров, необходимо указать системную переменную несколько раз. Например:
[mariadb] ... replicate_ignore_db=db1 replicate_ignore_db=db2
Это укажет реплике выполнить следующее:
- Игнорировать инструкции и транзакции, затрагивающие базы данных с именем db1.
- Игнорировать инструкции и транзакции, затрагивающие базы данных с именем db2.
- Реплицировать инструкции и транзакции, затрагивающие любые другие базы данных.
Системная переменная replicate_ignore_db фактически игнорируется, если установлена системная переменная replicate_do_db, поэтому эти две системные переменные не следует устанавливать вместе.
См. Настройка параметров фильтра репликации с многоисточниковой репликацией, чтобы узнать, как настроить эту системную переменную с многоисточниковой репликацией.
replicate_do_table
Системная переменная replicate_do_table позволяет настроить реплику для применения инструкций и транзакций, затрагивающих таблицы, соответствующие указанному имени. Имя таблицы указывается в формате: dbname.tablename.
Эта системная переменная не будет работать с межбазовыми обновлениями с логированием на основе инструкций. Дополнительная информация представлена в разделе Логирование на основе инструкций.
Этот параметр влияет только на инструкции, связанные с таблицами. Этот параметр не влияет на инструкции, связанные с самой базой данных, такие как CREATE DATABASE, ALTER DATABASE и DROP DATABASE.
При динамической настройке с помощью SET GLOBAL, системная переменная принимает список фильтров, разделенный запятыми.
При динамической настройке невозможно указать имена баз данных или таблиц, содержащие запятые. Если вам нужно указать имена баз данных или таблиц, содержащие запятые, необходимо указать их, либо предоставив параметры командной строки, либо настроив их в группе опций сервера группа опций в файле опций файл опций во время запуска сервера запуск.
При динамической настройке потоки репликации должны быть остановлены. Например:
STOP SLAVE; SET GLOBAL replicate_do_table='db1.tab,db2.tab'; START SLAVE;
При настройке в командной строке или в группе опций сервера группа опций в файле опций файл опций системная переменная не принимает список, разделенный запятыми. Если вы хотите указать несколько фильтров, необходимо указать системную переменную несколько раз. Например:
[mariadb] ... replicate_do_table=db1.tab replicate_do_table=db2.tab
Это укажет реплике выполнить следующее:
- Реплицировать инструкции и транзакции, затрагивающие таблицы в базах данных с именем db1 и имеющие имя tab.
- Реплицировать инструкции и транзакции, затрагивающие таблицы в базах данных с именем db2 и имеющие имя tab.
- Игнорировать инструкции и транзакции, затрагивающие любые другие таблицы.
См. Настройка параметров фильтра репликации с многоисточниковой репликацией, чтобы узнать, как настроить эту системную переменную с многоисточниковой репликацией.
replicate_ignore_table
Системная переменная replicate_ignore_table позволяет настроить реплику для игнорирования инструкций и транзакций, затрагивающих таблицы, соответствующие указанному имени. Имя таблицы указывается в формате: dbname.tablename.
Эта системная переменная не будет работать с межбазовыми обновлениями с логированием на основе инструкций. Дополнительная информация представлена в разделе Логирование на основе инструкций.
При динамической настройке с помощью SET GLOBAL, системная переменная принимает список фильтров, разделенный запятыми.
При динамической настройке невозможно указать имена баз данных или таблиц, содержащие запятые. Если вам нужно указать имена баз данных или таблиц, содержащие запятые, необходимо указать их, либо предоставив параметры командной строки, либо настроив их в группе опций сервера группа опций в файле опций файл опций во время запуска сервера запуск.
При динамической настройке потоки репликации должны быть остановлены. Например:
STOP SLAVE; SET GLOBAL replicate_ignore_table='db1.tab,db2.tab'; START SLAVE;
При настройке в командной строке или в группе опций сервера группа опций в файле опций файл опций системная переменная не принимает список, разделенный запятыми. Если вы хотите указать несколько фильтров, необходимо указать системную переменную несколько раз. Например:
[mariadb] ... replicate_ignore_table=db1.tab replicate_ignore_table=db2.tab
Это укажет реплике выполнить следующее:
- Игнорировать инструкции и транзакции, затрагивающие таблицы в базах данных с именем db1 и имеющие имя tab.
- Игнорировать инструкции и транзакции, затрагивающие таблицы в базах данных с именем db2 и имеющие имя tab.
- Реплицировать инструкции и транзакции, затрагивающие любые другие таблицы.
Системная переменная replicate_ignore_table фактически игнорируется, если установлена системная переменная replicate_do_table или replicate_wild_do_table, поэтому системную переменную replicate_ignore_table не следует использовать с этими двумя переменными.
См. Настройка параметров фильтра репликации с многоисточниковой репликацией, чтобы узнать, как настроить эту системную переменную с многоисточниковой репликацией.
replicate_wild_do_table
Системная переменная replicate_wild_do_table позволяет настроить реплику для применения инструкций и транзакций, затрагивающих таблицы, соответствующие указанному шаблону с подстановкой символов.
Шаблон подстановки символов использует те же семантику, что и оператор LIKE. Это означает, что следующие символы имеют специальное значение:
-
_- Символ_соответствует любому одиночному символу. -
%- Символ%соответствует нулю или более символам. -
\- Символ\используется для экранирования других специальных символов в тех случаях, когда нужен литеаный символ.
Эта системная переменная работает с межбазовыми обновлениями с логированием на основе инструкций. Дополнительная информация представлена в разделе Логирование на основе инструкций.
Системная переменная фильтрует базы данных, таблицы, представления и триггеры.
Системная переменная не фильтрует хранимые процедуры, хранимые функции и события. Для фильтрации этих элементов необходимо использовать системную переменную replicate_do_db.
Если шаблон имени таблицы для фильтра задан только как %, то будут сопоставлены все таблицы в базе данных. В этом случае фильтр также повлияет на определённые операторы уровня базы данных, такие как CREATE DATABASE, ALTER DATABASE и DROP DATABASE.
При динамической установке с помощью SET GLOBAL, переменная системы принимает список фильтров, разделённых запятыми.
При динамической установке невозможно указать имена или шаблоны баз данных или таблиц, содержащие запятые. Если вам нужно указать имена или шаблоны баз данных или таблиц, содержащие запятые, то вам необходимо указать их, либо предоставив параметры командной строки, либо настроив их в группе опций сервера группа опций в файле опций файл опций, когда сервер запускается.
При динамической установке потоки репликации должны быть остановлены. Например:
STOP SLAVE; SET GLOBAL replicate_wild_do_table='db%.tab%,app1.%'; START SLAVE;
При установке в командной строке или в группе опций сервера группа опций в файле опций файл опций, переменная системы не принимает список, разделённый запятыми. Если вы хотите указать несколько фильтров, то вам необходимо указать переменную системы несколько раз. Например:
[mariadb] ... replicate_wild_do_table=db%.tab% replicate_wild_do_table=app1.%
Это укажет реплике выполнить следующие действия:
- Реплицировать операторы и транзакции, влияющие на таблицы в базах данных, начинающиеся с db, и чьи имена таблиц начинаются с tab.
- Реплицировать операторы и транзакции, влияющие на базу данных под названием app1.
- Игнорировать операторы и транзакции, влияющие на любые другие таблицы и базы данных.
См. Настройка параметров фильтрации репликации с многоисточниковой репликацией для получения информации о настройке этой переменной системы с многоисточниковой репликацией.
replicate_wild_ignore_table
Переменная системы replicate_wild_ignore_table позволяет настроить репликацию на игнорирование операторов и транзакций, которые влияют на таблицы, соответствующие указанному шаблону с подстановкой символов.
Шаблон с подстановкой символов использует те же семантики, что и оператор LIKE. Это означает, что следующие символы имеют специальное значение:
-
_- Символ_соответствует любому одиночному символу. -
%- Символ%соответствует нулю или более символам. -
\- Символ\используется для экранирования других специальных символов в случаях, когда вам нужен буквальный символ.
Эта переменная системы будет работать с межбазовыми обновлениями со журналированием на основе операторов. Дополнительную информацию см. в разделе Журналирование на основе операторов.
Переменная системы фильтрует базы данных, таблицы, представления и триггеры.
Переменная системы не фильтрует хранимые процедуры, хранимые функции и события. Для фильтрации этих элементов необходимо использовать переменную системы replicate_ignore_db.
Если шаблон имени таблицы для фильтра задан только как %, то будут сопоставлены все таблицы в базе данных. В этом случае фильтр также повлияет на определённые операторы уровня базы данных, такие как CREATE DATABASE, ALTER DATABASE и DROP DATABASE.
При динамической установке с помощью SET GLOBAL, переменная системы принимает список фильтров, разделённых запятыми.
При динамической установке невозможно указать имена или шаблоны баз данных или таблиц, содержащие запятые. Если вам нужно указать имена или шаблоны баз данных или таблиц, содержащие запятые, то вам необходимо указать их, либо предоставив параметры командной строки, либо настроив их в группе опций сервера группа опций в файле опций файл опций, когда сервер запускается.
При динамической установке потоки репликации должны быть остановлены. Например:
STOP SLAVE; SET GLOBAL replicate_wild_ignore_table='db%.tab%,app1.%'; START SLAVE;
При установке в командной строке или в группе опций сервера группа опций в файле опций файл опций, переменная системы не принимает список, разделённый запятыми. Если вы хотите указать несколько фильтров, то вам необходимо указать переменную системы несколько раз. Например:
[mariadb] ... replicate_wild_ignore_table=db%.tab% replicate_wild_ignore_table=app1.%
Это укажет реплике выполнить следующие действия:
- Игнорировать операторы и транзакции, влияющие на таблицы в базах данных, начинающиеся с db, и чьи имена таблиц начинаются с tab.
- Игнорировать операторы и транзакции, влияющие на все таблицы в базе данных под названием app1.
- Реплицировать операторы и транзакции, влияющие на любые другие таблицы и базы данных.
Переменная системы replicate_ignore_table фактически игнорируется, если установлена либо переменная системы replicate_do_table, либо переменная системы replicate_wild_do_table, поэтому переменная системы replicate_ignore_table не должна использоваться вместе с этими двумя переменными.
См. Настройка параметров фильтрации репликации с многоисточниковой репликацией для получения информации о настройке этой переменной системы с многоисточниковой репликацией.
Настройка параметров фильтрации репликации с многоисточниковой репликацией
Способ настройки фильтров репликации с многоисточниковой репликацией зависит от того, настраиваете ли вы их динамически или в группе опций сервера группа опций в файле опций файл опций.
Динамическая настройка параметров фильтрации репликации с многоисточниковой репликацией
Использование динамических фильтров репликации несколько изменяется при использовании многоисточниковой репликации. По умолчанию переменные обращаются к подключению по умолчанию, поэтому в многоисточниковой среде необходимо указать требуемое подключение. Есть два способа сделать это.
Префикс опции фильтра репликации с именем подключения
Один из способов изменить фильтр репликации для многоисточникового подключения — явно указать имя при изменении фильтра. Например:
STOP SLAVE 'gandalf'; SET GLOBAL gandalf.replicate_do_table='database1.table1,database1.table2,database1.table3'; START SLAVE 'gandalf';
Изменение подключения по умолчанию
В качестве альтернативы, подключение по умолчанию можно изменить, установив переменную системы default_master_connection, а затем изменить фильтр репликации обычным способом. Например:
SET default_master_connection = 'gandalf'; STOP SLAVE; SET GLOBAL replicate_do_table='database1.table1,database1.table2,database1.table3'; START SLAVE;
Настройка параметров фильтрации репликации в файлах опций с многоисточниковой репликацией
Если вы используете многоисточниковая репликация и хотите сохранить этот фильтр при перезагрузке сервера, добавив его в группу опций сервера группа опций в файле опций файл опций, то файл опций также может включать имя подключения, к которому будет применяться каждый фильтр. Например:
[mariadb] ... gandalf.replicate_do_db=database1 saruman.replicate_do_db=database2
Параметры CHANGE MASTER
У оператора CHANGE MASTER есть несколько параметров, которые могут использоваться для фильтрации определённых типов событий бинарного лога.
IGNORE_SERVER_IDS
Параметр IGNORE_SERVER_IDS для CHANGE MASTER может быть использован для настройки реплики на игнорирование событий бинарного лога, которые произошли на определённых серверах. Отфильтрованные события бинарного лога не будут записаны в журнал репликации реплики, и они не будут применены репликой.
DO_DOMAIN_IDS
Параметр DO_DOMAIN_IDS для CHANGE MASTER может быть использован для настройки реплики на применение событий бинарного лога только если GTID транзакции находится в определённом значении gtid_domain_id. Отфильтрованные события бинарного лога не будут записаны в журнал репликации реплики, и они не будут применены репликой.
IGNORE_DOMAIN_IDS
Параметр IGNORE_DOMAIN_IDS для CHANGE MASTER может быть использован для настройки реплики на игнорирование событий бинарного лога, если GTID транзакции находится в определённом значении gtid_domain_id. Отфильтрованные события бинарного лога не будут записаны в журнал репликации реплики, и они не будут применены репликой.
Фильтры репликации и форматы бинарных логов
Способ интерпретации фильтра репликации может зависеть от формата бинарного лога.
Журналирование на основе операторов
Когда событие регистрируется в формате на основе операторов, многие фильтры репликации, влияющие на базу данных, проверяют фильтр на соответствие с базой данных по умолчанию (т.е. той, которая выбрана оператором USE). Это относится к следующим фильтрам репликации:
Когда событие регистрируется в формате на основе операторов, многие фильтры репликации, влияющие на таблицу, проверяют фильтр на соответствие с таблицей в базе данных по умолчанию (т.е. той, которая выбрана оператором USE). Это относится к следующим фильтрам репликации:
Это означает, что транзакции между базами данных не работают с фильтрами репликации и журналированием бинарного лога на основе операторов. Например, если replicate_do_table=db2.tab было установлено, то следующее не будет реплицироваться с помощью журналирования бинарного лога на основе операторов:
USE db1; INSERT INTO db2.tab VALUES (1);
Если вам необходимо поддерживать межбазовые обновления с фильтрами репликации и журналированием бинарного лога на основе операторов, то следует использовать следующие фильтры репликации:
Журналирование на основе строк
Когда событие регистрируется в формате на основе строк, многие фильтры репликации, влияющие на базу данных, проверяют фильтр на соответствие с базой данных, которая фактически затронута событием.
Аналогично, когда событие регистрируется в формате на основе строк, многие фильтры репликации, влияющие на таблицу, проверяют фильтр на соответствие с таблицей в базе данных, которая фактически затронута событием.
Это означает, что межбазовые обновления работают с фильтрами репликации и журналированием бинарного лога на основе операторов.
Обратите внимание, что операторы DDL всегда регистрируются в бинарном логе в формате на основе операторов, даже когда переменная системы binlog_format установлена в ROW. Это означает, что замечания, упомянутые в разделе Журналирование на основе операторов, всегда относятся к операторам DDL.
Фильтры репликации и кластер Galera
При использовании кластера Galera фильтры репликации следует использовать с осторожностью. Более подробную информацию см. в разделе Настройка кластера MariaDB Galera: Фильтры репликации.
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/replication-filters/