Spec-Zone.ru › MySQL 9.2

15.4.2.2 Выполнение команды CHANGE REPLICATION SOURCE TO

CHANGE REPLICATION SOURCE TO option [, option] ... [ channel_option ]

option: {
    SOURCE_BIND = 'interface_name'
  | SOURCE_HOST = 'host_name'
  | SOURCE_USER = 'user_name'
  | SOURCE_PASSWORD = 'password'
  | SOURCE_PORT = port_num
  | PRIVILEGE_CHECKS_USER = {NULL | 'account'}
  | REQUIRE_ROW_FORMAT = {0|1}
  | REQUIRE_TABLE_PRIMARY_KEY_CHECK = {STREAM | ON | OFF | GENERATE}
  | ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS = {OFF | LOCAL | uuid}
  | SOURCE_LOG_FILE = 'source_log_name'
  | SOURCE_LOG_POS = source_log_pos
  | SOURCE_AUTO_POSITION = {0|1}
  | RELAY_LOG_FILE = 'relay_log_name'
  | RELAY_LOG_POS = relay_log_pos
  | SOURCE_HEARTBEAT_PERIOD = interval
  | SOURCE_CONNECT_RETRY = interval
  | SOURCE_RETRY_COUNT = count
  | SOURCE_CONNECTION_AUTO_FAILOVER = {0|1}
  | SOURCE_DELAY = interval
  | SOURCE_COMPRESSION_ALGORITHMS = 'algorithm[,algorithm][,algorithm]'
  | SOURCE_ZSTD_COMPRESSION_LEVEL = level
  | SOURCE_SSL = {0|1}
  | SOURCE_SSL_CA = 'ca_file_name'
  | SOURCE_SSL_CAPATH = 'ca_directory_name'
  | SOURCE_SSL_CERT = 'cert_file_name'
  | SOURCE_SSL_CRL = 'crl_file_name'
  | SOURCE_SSL_CRLPATH = 'crl_directory_name'
  | SOURCE_SSL_KEY = 'key_file_name'
  | SOURCE_SSL_CIPHER = 'cipher_list'
  | SOURCE_SSL_VERIFY_SERVER_CERT = {0|1}
  | SOURCE_TLS_VERSION = 'protocol_list'
  | SOURCE_TLS_CIPHERSUITES = 'ciphersuite_list'
  | SOURCE_PUBLIC_KEY_PATH = 'key_file_name'
  | GET_SOURCE_PUBLIC_KEY = {0|1}
  | NETWORK_NAMESPACE = 'namespace'
  | IGNORE_SERVER_IDS = (server_id_list),
  | GTID_ONLY = {0|1}
}

channel_option:
    FOR CHANNEL channel

server_id_list:
    [server_id [, server_id] ... ]

CHANGE REPLICATION SOURCE TO изменяет параметры, которые сервер-реплика использует для подключения к источнику и чтения данных из источника. Также она обновляет содержимое репликационных метаданных (см. Раздел 19.2.4, «Журналы ретрансляции и репликационные метаданные»).

CHANGE REPLICATION SOURCE TO требует привилегии REPLICATION_SLAVE_ADMIN (или устаревшей привилегии SUPER).

Параметры, которые вы не указываете в команде CHANGE REPLICATION SOURCE TO, сохраняют свои значения, за исключением случаев, указанных ниже. В большинстве случаев нет необходимости указывать параметры, которые не меняются.

Значения, используемые для SOURCE_HOST и других параметров CHANGE REPLICATION SOURCE TO, проверяются на наличие символов новой строки (\n или 0x0A). Наличие таких символов в этих значениях приводит к ошибке выполнения команды.

Необязательная клауза FOR CHANNEL channel позволяет указать репликационный канал, к которому применяется команда. Указание клаузы FOR CHANNEL channel применяет команду CHANGE REPLICATION SOURCE TO к определённому репликационному каналу и используется для добавления нового канала или изменения существующего. Например, чтобы добавить новый канал под названием channel2:

CHANGE REPLICATION SOURCE TO SOURCE_HOST=host1, SOURCE_PORT=3002 FOR CHANNEL 'channel2';

Если клауза не указана и дополнительных каналов нет, команда CHANGE REPLICATION SOURCE TO применяется к каналу по умолчанию, имя которого пустая строка (""). При наличии нескольких репликационных каналов каждая команда CHANGE REPLICATION SOURCE TO должна указывать канал с помощью клаузы FOR CHANNEL channel. Дополнительную информацию см. в Разделе 19.2.2, «Репликационные каналы».

Для некоторых параметров команды CHANGE REPLICATION SOURCE TO необходимо выполнить команду STOP REPLICA перед выполнением CHANGE REPLICATION SOURCE TO (и START REPLICA после). Иногда достаточно остановить только поток SQL-приложения (применителя) или поток ввода/вывода репликации (приёмника), а не оба:

  • При остановке потока применителя, можно выполнить CHANGE REPLICATION SOURCE TO используя любые разрешенные комбинации параметров RELAY_LOG_FILE, RELAY_LOG_POS и SOURCE_DELAY, даже если поток приёмника репликации работает. При работе потока приёмника любые другие параметры использовать нельзя.

  • При остановке потока приёмника, можно выполнить CHANGE REPLICATION SOURCE TO используя любые разрешенные комбинации параметров за исключением RELAY_LOG_FILE, RELAY_LOG_POS, SOURCE_DELAY и SOURCE_AUTO_POSITION = 1, даже если поток применителя работает.

  • Оба потока, приёмника и применителя, должны быть остановлены перед выполнением команды CHANGE REPLICATION SOURCE TO, использующей параметры SOURCE_AUTO_POSITION = 1, GTID_ONLY = 1 или ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS.

Для проверки текущего состояния потоков применителя и приёмника репликации можно использовать команду SHOW REPLICA STATUS. Обратите внимание, что канал применителя репликации группы (group_replication_applier) не имеет потока приёмника, только поток применителя.

Команды CHANGE REPLICATION SOURCE TO имеют ряд побочных эффектов и взаимодействий, о которых следует знать:

  • CHANGE REPLICATION SOURCE TO вызывает неявное подтверждение текущей транзакции. См. Раздел 15.3.3, «Команды, вызывающие неявное подтверждение».

  • CHANGE REPLICATION SOURCE TO вызывает запись предыдущих значений SOURCE_HOST, SOURCE_PORT, SOURCE_LOG_FILE и SOURCE_LOG_POS в журнал ошибок, вместе с другой информацией о состоянии реплики до выполнения.

  • При использовании репликации на основе команд и временных таблиц, команда CHANGE REPLICATION SOURCE TO после STOP REPLICA может оставить временные таблицы на реплике. В таких случаях выводится предупреждение (). Чтобы избежать этого, убедитесь, что значение системной переменной состояния Replica_open_temp_tables равно 0 до выполнения команды CHANGE REPLICATION SOURCE TO.

  • При использовании многопоточной реплики (replica_parallel_workers > 0), остановка реплики может привести к разрывам в последовательности транзакций, выполняемых из журнала ретрансляции, независимо от того, была ли остановка преднамеренной или нет. В MySQL 9.2 эти разрывы можно устранить с помощью автоматического позиционирования GTID.

Доступны следующие параметры для команд CHANGE REPLICATION SOURCE TO:

END_OF_DOCUMENT_MARKER
  • ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS = {OFF | LOCAL | uuid}

    Заставляет канал репликации назначать идентификатор GTID реплицируемым транзакциям, у которых его нет, что позволяет производить репликацию из источника, не использующего репликацию на основе GTID, на реплику, которая использует. Для реплики с несколькими источниками вы можете иметь смесь каналов, использующих ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS, и каналов, которые этого не делают. По умолчанию значение OFF, что означает, что функция не используется.

    LOCAL назначает GTID, включающий собственный UUID реплики (настройка server_uuid). uuid назначает GTID, включающий указанный UUID, например, настройку server_uuid для сервера источника репликации. Использование нелокального UUID позволяет различать транзакции, исходящие от реплики и транзакции, исходящие от источника, а для реплики с несколькими источниками — между транзакциями, исходящими от различных источников. Выбранный вами UUID имеет значение только для собственного использования реплики. Если у любой из транзакций, отправленных источником, уже есть GTID, этот GTID сохраняется.

    Специфические каналы для Group Replication не могут использовать ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS, но асинхронный канал репликации для другого источника на экземпляре сервера, являющемся членом группы Group Replication, может это делать. В этом случае не указывайте имя группы Group Replication в качестве UUID для создания GTID.

    Чтобы установить ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS в значение LOCAL или uuid, реплика должна иметь настройку gtid_mode=ON, и это значение нельзя изменить после этого. Этот параметр предназначен для использования с источником, который имеет репликацию на основе позиции файла журнала двоичных логов, поэтому SOURCE_AUTO_POSITION=1 нельзя установить для канала. Перед установкой этого параметра необходимо остановить как поток SQL репликации, так и поток ввода-вывода репликации (приемник).

    Важно

    Реплика, настроенная с ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS на любом канале, не может быть повышена до уровня, заменяющего сервер источника репликации в случае необходимости переключения, а резервная копия, взятая с реплики, не может быть использована для восстановления сервера источника репликации. Такое же ограничение относится к замене или восстановлению других реплик, которые используют ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS на любом канале.

    Дополнительные ограничения и информация см. в разделе 19.1.3.6, «Репликация из источника без GTID на реплику с GTID».

  • GET_SOURCE_PUBLIC_KEY = {0|1}

    Включает обмен паролями на основе пар ключей RSA, запрашивая открытый ключ у источника. Параметр по умолчанию отключён.

    Этот параметр применяется к репликам, которые аутентифицируются с помощью плагина аутентификации caching_sha2_password. Для подключений от учётных записей, которые аутентифицируются с помощью этого плагина, источник не отправляет открытый ключ, если его не запросить, поэтому его нужно запросить или указать в клиенте. Если SOURCE_PUBLIC_KEY_PATH указан и содержит корректный файл открытого ключа, он имеет приоритет перед GET_SOURCE_PUBLIC_KEY. Если вы используете учётную запись репликации, которая аутентифицируется с помощью плагина caching_sha2_password (по умолчанию), и не используете безопасное соединение, вы должны указать либо этот параметр, либо параметр SOURCE_PUBLIC_KEY_PATH для предоставления открытого ключа RSA реплике.

  • GTID_ONLY = {0|1}

    Прекращает сохранение имён файлов и позиций файлов в репликационных хранилищах метаданных. GTID_ONLY по умолчанию отключён для асинхронных каналов репликации, но включён по умолчанию для каналов Group Replication, для которых его нельзя отключить.

    Для каналов репликации с этой настройкой позиции файлов в оперативной памяти всё ещё отслеживаются, и позиции файлов по-прежнему могут быть просмотрены для отладки в сообщениях об ошибках и через интерфейсы, такие как SHOW REPLICA STATUS (где они отображаются как недействительные, если устарели). Однако операции записи и чтения, необходимые для сохранения и проверки позиций файлов, избегаются в ситуациях, когда репликация на основе GTID фактически не требует их, включая очереди транзакций и процесс приложения.

    Этот параметр может быть использован только если остановлены оба потока SQL репликации (применитель) и ввода-вывода репликации (приёмник). Для установки GTID_ONLY = 1 для канала репликации на сервере должны использоваться GTID (gtid_mode = ON), и на источнике должна быть включена строчная запись журнала двоичных логов (репликация по операторам не поддерживается). Параметры REQUIRE_ROW_FORMAT = 1 и SOURCE_AUTO_POSITION = 1 должны быть установлены для канала репликации.

    При установке GTID_ONLY = 1 реплика использует replica_parallel_workers=1, если эта системная переменная установлена в ноль для сервера, поэтому она всегда технически является многопоточным приложением. Это происходит потому, что многопоточное приложение использует сохранённые позиции, а не репликационные хранилища метаданных, чтобы найти начало транзакции, которую ему нужно повторно применить.

    Если вы отключите GTID_ONLY после его установки, существующие релейные журналы удаляются, и существующие известные позиции файла двоичного журнала сохраняются, даже если они устарели. Позиции файлов двоичного и релейного журналов в репликационных хранилищах метаданных могут быть недействительными, и возвращается сообщение об ошибке, если это так. При условии, что SOURCE_AUTO_POSITION всё ещё включен, используется автоматическое позиционирование GTID для предоставления правильного позиционирования.

    Если вы также отключите SOURCE_AUTO_POSITION, позиции файлов двоичного и релейного журнала в репликационных хранилищах метаданных используются для позиционирования, если они действительны. Если они помечены как недействительные, вы должны предоставить действительное имя файла двоичного журнала и позицию (SOURCE_LOG_FILE и SOURCE_LOG_POS). Если вы также предоставите имя файла и позицию релейного журнала (RELAY_LOG_FILE и RELAY_LOG_POS), релейные журналы сохраняются, и позиция приложения устанавливается в указанную позицию. Автоматический переход по GTID гарантирует, что любые уже применённые транзакции будут пропущены, даже если конечная позиция приложения некорректна.

  • IGNORE_SERVER_IDS = (server_id_list)

    Заставляет реплику игнорировать события, исходящие от указанных серверов. Параметр принимает список, разделенный запятыми, из 0 или более идентификаторов серверов. События изменения и удаления логов с серверов не игнорируются и записываются в релейный журнал.

    При циклической репликации исходный сервер обычно действует как терминатор собственных событий, чтобы они не применялись более одного раза. Таким образом, этот параметр полезен при циклической репликации, когда один из серверов в цикле удаляется. Предположим, у вас есть циклическая репликация с 4 серверами, имеющими идентификаторы серверов 1, 2, 3 и 4, и сервер 3 выходит из строя. При перекрытии разрыва путём запуска репликации с сервера 2 на сервер 4, вы можете включить IGNORE_SERVER_IDS = (3) в оператор CHANGE REPLICATION SOURCE TO, который вы выпустите на сервере 4, чтобы указать ему использовать сервер 2 в качестве источника вместо сервера 3. Это заставит его игнорировать и не распространять какие-либо заявления, исходящие от сервера, который больше не используется.

    Если IGNORE_SERVER_IDS содержит собственный идентификатор сервера, и сервер был запущен с включённым параметром --replicate-same-server-id, возникает ошибка.

    Список серверов, которые в настоящее время игнорируются, предоставляется хранилищем метаданных источника и выводом SHOW REPLICA STATUS. Для получения дополнительной информации см. раздел 19.2.4.2, «Хранилища метаданных репликации» и раздел 15.7.7.35, «Оператор SHOW REPLICA STATUS».

    Если оператор CHANGE REPLICATION SOURCE TO выпущен без IGNORE_SERVER_IDS, любой существующий список сохраняется. Для очистки списка игнорируемых серверов необходимо использовать параметр с пустым списком, например:

    CHANGE REPLICATION SOURCE TO IGNORE_SERVER_IDS = ();
    

    Оператор RESET REPLICA ALL также очищает IGNORE_SERVER_IDS.

    При использовании глобальных идентификаторов транзакций (GTID) для репликации транзакции, которые уже были применены, автоматически игнорируются. Из-за этого IGNORE_SERVER_IDS несовместим с gtid_mode=ON. Если gtid_mode равен ON, CHANGE REPLICATION SOURCE TO со списком IGNORE_SERVER_IDS не пустым отклоняется с ошибкой. Аналогично, если какой-либо существующий канал репликации был создан со списком идентификаторов серверов, которые необходимо игнорировать, SET gtid_mode=ON также отклоняется. Перед запуском репликации на основе GTID проверьте и очистите любые списки игнорируемых идентификаторов серверов на участвующих серверах; вы можете сделать это, проверив вывод из SHOW REPLICA STATUS. В таких случаях вы можете очистить список, выпустив CHANGE REPLICATION SOURCE TO с пустым списком идентификаторов серверов, как показано ранее.

  • NETWORK_NAMESPACE = 'namespace'

    Пространство имен сети, используемое для TCP/IP-соединений с сервером источника репликации или, если используется стек связи MySQL, для межгрупповых соединений Group Replication. Максимальная длина строкового значения составляет 64 символа. Если этот параметр опущен, соединения с реплики используют по умолчанию (глобальное) пространство имен. На платформах, которые не поддерживают пространства имен сетей, возникает ошибка, когда реплика пытается подключиться к источнику. Сведения о пространствах имен сетей см. в разделе 7.1.14, «Поддержка пространств имен сетей».

  • PRIVILEGE_CHECKS_USER = {NULL | 'account'}

    Указывает имя учетной записи пользователя, предоставляющей контекст безопасности для указанного канала. Значение NULL, являющееся значением по умолчанию, означает, что контекст безопасности не используется.

    Имя пользователя и имя хоста для учетной записи пользователя должны соответствовать синтаксису, описанному в разделе 8.2.4, «Указание имён учетных записей», и пользователь не должен быть анонимным пользователем (с пустым именем пользователя) или CURRENT_USER. Учетная запись должна иметь привилегию REPLICATION_APPLIER, а также необходимые привилегии для выполнения транзакций, реплицированных на канале. Подробные сведения о требуемых привилегиях учетной записи см. в разделе 19.3.3, «Проверка привилегий репликации». При перезапуске канала репликации проверки привилегий применяются с этого момента. Если вы не укажете канал, и никаких других каналов не существует, операция применяется к каналу по умолчанию.

    Использование построчной двоичной записи журналов настоятельно рекомендуется, когда PRIVILEGE_CHECKS_USER установлено, и вы можете установить REQUIRE_ROW_FORMAT для принудительного соблюдения этого правила. Например, чтобы включить проверки привилегий на канале channel_1 на работающей реплике, выполните следующие операторы:

    STOP REPLICA FOR CHANNEL 'channel_1';
    
    CHANGE REPLICATION SOURCE TO
        PRIVILEGE_CHECKS_USER = 'user'@'host',
        REQUIRE_ROW_FORMAT = 1,
        FOR CHANNEL 'channel_1';
    
    START REPLICA FOR CHANNEL 'channel_1';
    
  • RELAY_LOG_FILE = 'relay_log_file' , RELAY_LOG_POS = 'relay_log_pos'

    Имя файла журнала ретрансляции и расположение в этом файле, с которого поток SQL репликации начнет чтение журнала ретрансляции реплики в следующий раз при запуске потока. RELAY_LOG_FILE может использовать абсолютный или относительный путь и использует то же базовое имя, что и SOURCE_LOG_FILE. Максимальная длина строкового значения составляет 511 символов.

    Оператор CHANGE REPLICATION SOURCE TO, использующий RELAY_LOG_FILE, RELAY_LOG_POS или оба параметра, можно выполнить на работающей реплике, когда поток SQL репликации (приемник) остановлен. Журналы ретрансляции сохраняются, если хотя бы один из потоков репликации (приемник) и поток ввода/вывода репликации (получатель) работает. Если оба потока остановлены, все файлы журналов ретрансляции удаляются, если не указан хотя бы один из RELAY_LOG_FILE или RELAY_LOG_POS. Для канала репликации приложения Group Replication (group_replication_applier), который имеет только поток приемника, а не поток получателя, это имеет место, если поток приемника остановлен, но с этим каналом вы не можете использовать параметры RELAY_LOG_FILE и RELAY_LOG_POS.

  • REQUIRE_ROW_FORMAT = {0|1}

    Разрешает обработку только событий репликации на основе строк каналом репликации. Этот параметр предотвращает выполнение операциями приемника репликации таких действий, как создание временных таблиц и выполнение запросов LOAD DATA INFILE, что повышает безопасность канала. Параметр REQUIRE_ROW_FORMAT по умолчанию отключен для асинхронных каналов репликации, но включен по умолчанию для каналов Group Replication и не может быть отключен для них. Дополнительные сведения см. в разделе 19.3.3, «Проверка привилегий репликации».

  • REQUIRE_TABLE_PRIMARY_KEY_CHECK = {STREAM | ON | OFF | GENERATE}

    Этот параметр позволяет реплике установить собственные правила для проверки первичных ключей следующим образом:

    • ON: Реплика устанавливает значение sql_require_primary_key = ON; любой реплицированный оператор CREATE TABLE или ALTER TABLE должен привести к таблице, содержащей первичный ключ.

    • OFF: Реплика устанавливает значение sql_require_primary_key = OFF; реплицированный оператор CREATE TABLE или ALTER TABLE не проверяется на наличие первичного ключа.

    • STREAM: Реплика использует любое значение sql_require_primary_key, реплицированное со источника для каждой транзакции. Это значение по умолчанию и поведение по умолчанию.

    • GENERATE: Заставляет реплику генерировать невидимый первичный ключ для любой таблицы InnoDB, которая, при репликации, не имеет первичного ключа. См. раздел 15.1.21.11, «Сгенерированные невидимые первичные ключи» для получения дополнительной информации.

      GENERATE несовместим с Group Replication; вы можете использовать ON, OFF или STREAM.

    Различие на основе наличия сгенерированного невидимого первичного ключа только в таблице источника или реплики поддерживается репликацией MySQL, если источник поддерживает GIPKs, а реплика использует версию MySQL 8.0.32 или новее. Если вы используете GIPKs на реплике, а источник использует более раннюю версию MySQL, такие различия в схеме, кроме дополнительного GIPK на реплике, не поддерживаются и могут привести к ошибкам репликации.

    Для репликации с несколькими источниками, установка REQUIRE_TABLE_PRIMARY_KEY_CHECK на ON или OFF позволяет реплике нормализовать поведение по каналам репликации для различных источников и поддерживать согласованное значение для sql_require_primary_key. Использование ON защищает от случайной потери первичных ключей, когда несколько источников обновляют один и тот же набор таблиц. Использование OFF позволяет источникам, которые могут изменять первичные ключи, работать вместе с источниками, которые не могут.

    В случае нескольких реплик, когда REQUIRE_TABLE_PRIMARY_KEY_CHECK установлено на GENERATE, сгенерированный невидимый первичный ключ, добавленный данной репликой, независим от любого такого ключа, добавленного на любой другой реплике. Это означает, что если сгенерированные невидимые первичные ключи используются, значения в столбцах сгенерированного первичного ключа на разных репликах не гарантируются одинаковыми. Это может быть проблемой при переключении на такую реплику.

    Когда PRIVILEGE_CHECKS_USER установлено на NULL (по умолчанию), учетной записи пользователя не требуются привилегии администрирования для установки ограниченных переменных сеанса. Установка этого параметра на значение, отличное от NULL, означает, что когда REQUIRE_TABLE_PRIMARY_KEY_CHECK установлено на ON, OFF или GENERATE, учетной записи пользователя не требуются привилегии администрирования сеанса для установки ограниченных переменных сеанса, таких как sql_require_primary_key, избегая необходимости предоставления учетной записи таких привилегий. Дополнительные сведения см. в разделе 19.3.3, «Проверка привилегий репликации».

  • SOURCE_AUTO_POSITION = {0|1}

    Позволяет реплике пытаться подключиться к источнику, используя функцию автоматического позиционирования репликации на основе GTID, а не позицию на основе файла двоичного журнала. Этот параметр используется для запуска реплики с использованием репликации на основе GTID. Значение по умолчанию - 0, что означает, что автоматическое позиционирование GTID и репликация на основе GTID не используются. Этот параметр можно использовать с CHANGE REPLICATION SOURCE TO только в том случае, если оба потока (приемник SQL репликации и поток I/O репликации) остановлены.

    И на реплике, и на источнике должны быть включены GTIDs (GTID_MODE=ON, ON_PERMISSIVE, или OFF_PERMISSIVE на реплике, и GTID_MODE=ON на источнике). SOURCE_LOG_FILE, SOURCE_LOG_POS, RELAY_LOG_FILE и RELAY_LOG_POS не могут быть указаны вместе с SOURCE_AUTO_POSITION = 1. Если на реплике включена репликация с несколькими источниками, необходимо установить параметр SOURCE_AUTO_POSITION = 1 для каждого соответствующего канала репликации.

    При установленном SOURCE_AUTO_POSITION = 1 в начальном рукопожатии реплика отправляет набор GTID, содержащий транзакции, которые она уже получила, подтвердила или и то, и другое. Источник отвечает, отправляя все транзакции, записанные в его двоичном журнале, GTID которых не входит в набор GTID, отправленный репликой. Это обмен гарантирует, что источник отправляет только транзакции с GTID, которые реплика еще не зафиксировала или подтвердила. Если реплика получает транзакции от более чем одного источника, как в случае топологии "алмаз", функция автоматического пропуска гарантирует, что транзакции не будут применены дважды. Подробности о том, как вычисляется набор GTID, отправленный репликой, см. в разделе 19.1.3.3, «Автоматическое позиционирование GTID».

    Если какие-либо транзакции, которые должны быть отправлены источником, были удалены из двоичного журнала источника или добавлены в набор GTID в переменной системы gtid_purged другим способом, источник отправляет ошибку реплике, и репликация не начинается. GTID отсутствующих удаленных транзакций идентифицируются и перечисляются в журнале ошибок источника в сообщении об ошибке. Кроме того, если во время обмена транзакциями обнаружится, что реплика зафиксировала или подтвердила транзакции с UUID источника в GTID, но сам источник их не подтвердил, источник отправляет ошибку реплике, и репликация не начинается. Подробности о том, как обрабатывать эти ситуации, см. в разделе 19.1.3.3, «Автоматическое позиционирование GTID».

    Вы можете проверить, работает ли репликация с включенным автоматическим позиционированием GTID, проверив таблицу Performance Schema replication_connection_status или вывод оператора SHOW REPLICA STATUS. Отключение параметра SOURCE_AUTO_POSITION вернет реплику к файловой репликации.

  • SOURCE_BIND = 'interface_name'

    Определяет, какой сетевой интерфейс реплики используется для подключения к источнику, если у реплики несколько сетевых интерфейсов. Укажите IP-адрес сетевого интерфейса. Максимальная длина строкового значения — 255 символов.

    IP-адрес, настроенный с помощью этого параметра, при его наличии, отображается в столбце Source_Bind вывода из SHOW REPLICA STATUS. В таблице метаданных источника mysql.slave_master_info значение отображается в столбце Source_bind. Поддержка привязки реплики к конкретному сетевому интерфейсу также реализована в NDB Cluster.

  • SOURCE_COMPRESSION_ALGORITHMS = 'algorithm[,algorithm][,algorithm]'

    Указывает один, два или три разрешенных алгоритма сжатия для подключений к серверу источника репликации, разделенные запятыми. Максимальная длина строкового значения — 99 символов. Значение по умолчанию — uncompressed.

    Доступные алгоритмы — zlib, zstd и uncompressed, такие же, как для системной переменной protocol_compression_algorithms. Алгоритмы можно указывать в любом порядке, но это не порядок предпочтения — процесс согласования алгоритмов пытается использовать zlib, затем zstd, затем uncompressed, если они указаны.

    Значение SOURCE_COMPRESSION_ALGORITHMS применяется только в том случае, если системная переменная replica_compressed_protocol отключена. Если replica_compressed_protocol включена, она имеет приоритет над SOURCE_COMPRESSION_ALGORITHMS, и подключения к источнику используют сжатие zlib, если оба, источник и реплика, поддерживают этот алгоритм. Дополнительную информацию см. в разделе 6.2.8 «Управление сжатием подключений».

    Сжатие транзакций лога двоичных данных активируется системной переменной binlog_transaction_compression и также может использоваться для экономии пропускной способности. Если вы делаете это в сочетании со сжатием подключений, сжатие подключений имеет меньше возможностей для обработки данных, но все еще может сжимать заголовки и те события и фрагменты транзакций, которые не сжаты. Дополнительную информацию о сжатии транзакций лога двоичных данных см. в разделе 7.4.4.5 «Сжатие транзакций лога двоичных данных».

  • SOURCE_CONNECT_RETRY = interval

    Указывает интервал в секундах между попытками повторного подключения реплики после истечения срока подключения к источнику. Значение по умолчанию — 60.

    Количество попыток ограничено параметром SOURCE_RETRY_COUNT. Если используются оба значения по умолчанию, реплика ждет 60 секунд между попытками повторного подключения (SOURCE_CONNECT_RETRY=60) и продолжает попытки повторного подключения с такой скоростью в течение 10 минут (SOURCE_RETRY_COUNT=10). Эти значения записываются в репозиторий метаданных источника и отображаются в таблице схемы производительности replication_connection_configuration.

  • SOURCE_CONNECTION_AUTO_FAILOVER = {0|1}

    Активирует механизм асинхронного переключения источника подключения для канала репликации, если доступны один или несколько альтернативных серверов источника репликации (когда существует несколько серверов MySQL или групп серверов, которые разделяют реплицированные данные). Значение по умолчанию — 0, что означает, что механизм не активирован. Полную информацию и инструкции по настройке этой функции см. в разделе 19.4.9.2 «Асинхронное переключение источников подключения для реплик».

    Механизм асинхронного переключения подключения берет на себя контроль после того, как исчерпаны попытки повторного подключения, управляемые SOURCE_CONNECT_RETRY и SOURCE_RETRY_COUNT. Он переподключает реплику к альтернативному источнику, выбранному из указанного списка источников, которым вы можете управлять с помощью функций asynchronous_connection_failover_add_source() и asynchronous_connection_failover_delete_source(). Для добавления и удаления управляемых групп серверов используйте asynchronous_connection_failover_add_managed() и asynchronous_connection_failover_delete_managed() соответственно. Дополнительную информацию см. в разделе 19.4.9 «Переключение источников и реплик с помощью асинхронного переключения подключения».

    Важно
    1. Вы можете задать SOURCE_CONNECTION_AUTO_FAILOVER = 1 только при использовании автоматического позиционирования GTID (SOURCE_AUTO_POSITION = 1).

    2. При установке SOURCE_CONNECTION_AUTO_FAILOVER = 1 задайте SOURCE_RETRY_COUNT и SOURCE_CONNECT_RETRY=10 минимальные значения, которые просто позволяют несколько попыток повторного подключения с тем же источником на случай временного сбоя сети. В противном случае механизм асинхронного переключения подключения не может быть активирован своевременно. Подходящие значения — SOURCE_RETRY_COUNT=3 и SOURCE_CONNECT_RETRY=10, которые заставляют реплику 3 раза повторно подключаться с интервалами в 10 секунд между попытками.

    3. При установке SOURCE_CONNECTION_AUTO_FAILOVER = 1 репозитории метаданных репликации должны содержать учетные данные для учетной записи пользователя репликации, которая может использоваться для подключения ко всем серверам в списке источников для канала репликации. Учетная запись также должна иметь права SELECT на таблицы схемы производительности. Эти учетные данные можно задать с помощью оператора CHANGE REPLICATION SOURCE TO с параметрами SOURCE_USER и SOURCE_PASSWORD. Дополнительную информацию см. в разделе 19.4.9 «Переключение источников и реплик с помощью асинхронного переключения подключения».

    4. При установке SOURCE_CONNECTION_AUTO_FAILOVER = 1 асинхронное переключение подключения для реплик автоматически активируется, если этот канал репликации находится на первичном сервере Group Replication в группе в режиме одиночного первичного сервера. При активации этой функции, если первичный сервер, который выполняет репликацию, выходит из строя или попадает в состояние ошибки, новый первичный сервер начинает репликацию в том же канале, когда он избран. Если вы хотите использовать функцию, этот канал репликации также должен быть настроен на всех вторичных серверах в группе репликации и на всех новых присоединившихся участниках. (Если серверы развернуты с помощью функции клонирования MySQL, все это происходит автоматически). Если вы не хотите использовать функцию, отключите ее, используя функцию group_replication_disable_member_action() для отключения действия участника Group Replication mysql_start_failover_channels_if_primary, которое включено по умолчанию. Дополнительную информацию см. в разделе 19.4.9.2 «Асинхронное переключение источников подключения для реплик».

  • SOURCE_DELAY = interval

    Указывает, на сколько секунд реплика должна отставать от источника. Событие, полученное от источника, не выполняется до тех пор, пока не пройдет как минимум interval секунд после его выполнения на источнике. interval должно быть неотрицательным целым числом в диапазоне от 0 до 231−1. Значение по умолчанию — 0. Дополнительную информацию см. в разделе 19.4.11 «Задержанная репликация».

    Оператор CHANGE REPLICATION SOURCE TO с параметром SOURCE_DELAY может быть выполнен на работающей реплике, когда поток репликации SQL остановлен.

  • SOURCE_HEARTBEAT_PERIOD = interval

    Управляет интервалом посыла сердечных ударов, который предотвращает таймаут соединения в отсутствие данных, если соединение всё ещё активно. Сигнал сердечного удара отправляется реплике через заданное количество секунд, а период ожидания сбрасывается всякий раз, когда бинарный журнал источника обновляется событием. Следовательно, сердечные удары отправляются источником только в том случае, если в бинарном журнале нет событий, которые не были отправлены, в течение периода времени, превышающего этот интервал.

    Интервал сердечных ударов interval — это десятичное значение в диапазоне от 0 до 4294967 секунд с разрешением в миллисекундах; наименьшее ненулевое значение составляет 0,001. Установка interval в 0 полностью отключает сердечные удары. Интервал сердечных ударов по умолчанию равен половине значения системной переменной replica_net_timeout. Он записывается в репозитории метаданных источника и отображается в таблице Performance Schema replication_connection_configuration.

    Системная переменная replica_net_timeout указывает количество секунд, которое реплика ожидает новых данных или сигнала сердечного удара от источника, прежде чем реплика считает соединение прерванным, прерывает чтение и пытается повторно подключиться. Значение по умолчанию составляет 60 секунд (одна минута). Обратите внимание, что изменение значения или значения по умолчанию переменной replica_net_timeout не изменяет интервал сердечных ударов автоматически, независимо от того, был ли он установлен явно или использовался ранее вычисленный по умолчанию. Выдаётся предупреждение, если вы установите глобальное значение replica_net_timeout меньше текущего интервала сердечных ударов. Если replica_net_timeout изменено, необходимо также выполнить CHANGE REPLICATION SOURCE TO для корректировки интервала сердечных ударов до подходящего значения, чтобы сигнал сердечного удара поступал до истечения таймаута соединения. Если этого не сделать, сигнал сердечного удара не оказывает никакого эффекта, и если данные от источника не получены, реплика может неоднократно пытаться повторно подключиться, создавая замороженные потоки обработки дампов.

  • SOURCE_HOST = 'host_name'

    Имя хоста или IP-адрес сервера источника репликации. Реплика использует его для подключения к источнику. Максимальная длина строкового значения составляет 255 символов.

    Если вы укажете SOURCE_HOST или SOURCE_PORT, реплика предположит, что сервер источника отличается от предыдущего (даже если значение параметра такое же, как текущее значение). В этом случае старые значения имени и позиции файла бинарного журнала источника считаются недействительными, поэтому если вы не укажете SOURCE_LOG_FILE и SOURCE_LOG_POS в операторе, SOURCE_LOG_FILE='' и SOURCE_LOG_POS=4 будут автоматически добавлены.

    Установка SOURCE_HOST='' (то есть явное задание ему пустой строки) не эквивалентна отсутствию SOURCE_HOST вообще. Попытка установить SOURCE_HOST в пустую строку приведёт к ошибке.

  • SOURCE_LOG_FILE = 'source_log_name', SOURCE_LOG_POS = source_log_pos

    Имя файла бинарного журнала и позиция в нём, с которой поток ввода-вывода репликации (приёмник) начнёт чтение из бинарного журнала источника в следующий раз при запуске потока. Укажите эти параметры, если вы используете репликацию на основе позиции в файле бинарного журнала.

    SOURCE_LOG_FILE должно содержать числовой суффикс конкретного файла бинарного журнала, доступного на сервере источника, например, SOURCE_LOG_FILE='binlog.000145'. Максимальная длина строкового значения составляет 511 символов.

    SOURCE_LOG_POS — числовая позиция для реплики для начала чтения в этом файле. SOURCE_LOG_POS=4 представляет начало событий в файле бинарного журнала.

    Если вы укажете SOURCE_LOG_FILE или SOURCE_LOG_POS, вы не можете указать SOURCE_AUTO_POSITION = 1, которое предназначено для репликации на основе GTID.

    Если ни SOURCE_LOG_FILE, ни SOURCE_LOG_POS не указаны, реплика использует последние координаты потока SQL-репликации перед выполнением команды CHANGE REPLICATION SOURCE TO. Это гарантирует отсутствие разрывов в репликации, даже если поток SQL-репликации (применятель) отстал по сравнению с потоком ввода-вывода репликации (приёмник).

  • SOURCE_PASSWORD = 'password'

    Пароль учетной записи пользователя репликации для подключения к серверу источника репликации. Максимальная длина строкового значения составляет 32 символа. Если вы укажете SOURCE_PASSWORD, то SOURCE_USER также необходимо.

    Пароль, используемый для учетной записи пользователя репликации в операторе CHANGE REPLICATION SOURCE TO, ограничен 32 символами. Попытка использовать пароль длиной более 32 символов приведёт к ошибке при выполнении CHANGE REPLICATION SOURCE TO.

    Пароль маскируется в журналах сервера MySQL, таблицах Performance Schema и операторах SHOW PROCESSLIST.

  • SOURCE_PORT = port_num

    Номер TCP/IP-порта, который реплика использует для подключения к серверу источника репликации.

    Примечание

    Репликация не может использовать файлы сокетов Unix. Вы должны иметь возможность подключаться к серверу источника репликации через TCP/IP.

    Если вы укажете SOURCE_HOST или SOURCE_PORT, реплика предположит, что сервер источника отличается от предыдущего (даже если значение параметра такое же, как текущее значение). В этом случае старые значения имени и позиции файла бинарного журнала источника считаются недействительными, поэтому если вы не укажете SOURCE_LOG_FILE и SOURCE_LOG_POS в операторе, SOURCE_LOG_FILE='' и SOURCE_LOG_POS=4 будут автоматически добавлены.

  • SOURCE_PUBLIC_KEY_PATH = 'key_file_name'

    Включает обмен паролями на основе пар ключей RSA, предоставляя имя файла, содержащего копию открытого ключа со стороны реплики, необходимую источнику. Файл должен быть в формате PEM. Максимальная длина строкового значения составляет 511 символов.

    Этот параметр применяется к репликам, которые авторизуются с помощью плагина аутентификации sha256_password или caching_sha2_password. (Для sha256_password, SOURCE_PUBLIC_KEY_PATH может быть использован только если MySQL был скомпилирован с использованием OpenSSL.) Если вы используете учетную запись пользователя репликации, которая авторизуется с помощью плагина caching_sha2_password (по умолчанию), и не используете защищённое соединение, вы должны указать этот параметр или параметр GET_SOURCE_PUBLIC_KEY=1, чтобы предоставить открытый ключ RSA реплике.

  • SOURCE_RETRY_COUNT = count

    Устанавливает максимальное количество попыток повторного подключения, которые реплика делает после истечения таймаута соединения с источником, как определено системной переменной replica_net_timeout. Если реплике требуется повторное подключение, первая попытка происходит сразу после истечения таймаута. Значение по умолчанию составляет 10 попыток.

    Интервал между попытками задаётся параметром SOURCE_CONNECT_RETRY. Если используются оба значения по умолчанию, реплика ожидает 60 секунд между попытками повторного подключения (SOURCE_CONNECT_RETRY=60) и продолжает пытаться повторно подключиться с такой скоростью в течение 10 минут (SOURCE_RETRY_COUNT=10). Установка значения 0 для SOURCE_RETRY_COUNT означает отсутствие ограничения на количество попыток повторного подключения, поэтому реплика продолжает пытаться подключиться неограниченное время.

    Значения для SOURCE_CONNECT_RETRY и SOURCE_RETRY_COUNT записываются в репозитории метаданных источника и отображаются в таблице Performance Schema replication_connection_configuration. SOURCE_RETRY_COUNT заменяет параметр запуска сервера --master-retry-count.

  • SOURCE_SSL = {0|1}

    Указывает, шифруется ли соединение репликации. Значение по умолчанию — 0, что означает, что соединение репликации не шифруется. Если вы установите SOURCE_SSL=1, вы можете настроить шифрование с помощью параметров SOURCE_SSL_xxx и SOURCE_TLS_xxx.

    Установка SOURCE_SSL=1 для соединения репликации без дальнейших параметров SOURCE_SSL_xxx соответствует установке --ssl-mode=REQUIRED для клиента, как описано в Command Options for Encrypted Connections. При установке SOURCE_SSL=1 попытка подключения удастся только при установлении защищённого соединения. Соединение репликации не переключается на незашифрованное соединение, поэтому нет параметра, соответствующего параметру --ssl-mode=PREFERRED для репликации. Если SOURCE_SSL=0 установлено, это соответствует --ssl-mode=DISABLED.

    Важно

    Для предотвращения сложных атак «человек посередине» важно, чтобы реплика проверяла подлинность сервера. Вы можете указать дополнительные параметры SOURCE_SSL_xxx, которые соответствуют настройкам --ssl-mode=VERIFY_CA и --ssl-mode=VERIFY_IDENTITY, которые являются лучшим выбором, чем значение по умолчанию для предотвращения этого типа атаки. С этими настройками реплика проверяет, что сертификат сервера действителен, и проверяет, что имя хоста, используемое репликой, соответствует идентификатору в сертификате сервера. Для реализации одного из этих уровней проверки необходимо сначала убедиться, что сертификат удостоверяющего центра (CA) сервера надёжно доступен реплике, иначе это приведёт к проблемам с доступностью. По этой причине они не являются значениями по умолчанию.

  • SOURCE_SSL_xxx, SOURCE_TLS_xxx

    Укажите, как реплика использует шифрование и алгоритмы для защиты соединения репликации. Эти параметры могут быть изменены даже на репликах, скомпилированных без поддержки SSL. Они сохраняются в репозитории метаданных источника, но игнорируются, если у реплики не включена поддержка SSL. Максимальная длина значения для параметров со строковым значением SOURCE_SSL_xxx и SOURCE_TLS_xxx составляет 511 символов, за исключением SOURCE_TLS_CIPHERSUITES, для которого она составляет 4000 символов.

    Параметры SOURCE_SSL_xxx и SOURCE_TLS_xxx выполняют те же функции, что и параметры клиентов --ssl-xxx и --tls-xxx, описанные в Параметрах команд для шифрованных подключений. Соответствие между двумя наборами параметров и использование параметров SOURCE_SSL_xxx и SOURCE_TLS_xxx для настройки защищённого подключения объясняется в Разделе 19.3.1, «Настройка репликации с использованием шифрованных подключений».

  • SOURCE_USER = 'user_name'

    Имя пользователя для учетной записи пользователя репликации, используемой для подключения к серверу источника репликации. Максимальная длина строкового значения составляет 96 символов.

    Для групповой репликации эта учетная запись должна существовать на каждом члене группы репликации. Она используется для распределённого восстановления, если для группы используется стек коммуникаций XCom, а также для подключений к группе, если используется стек коммуникаций MySQL. При использовании стека коммуникаций MySQL учетная запись должна иметь разрешение GROUP_REPLICATION_STREAM.

    Можно задать пустое имя пользователя, указав SOURCE_USER='', но канал репликации не может быть запущен с пустым именем пользователя. Действительно задать пустое имя пользователя SOURCE_USER и использовать канал впоследствии, если вы всегда предоставляете учетные данные пользователя с помощью инструкции START REPLICA или инструкции START GROUP_REPLICATION, которые запускают канал репликации. Этот подход означает, что для перезапуска канала репликации всегда требуется вмешательство оператора, но учетные данные пользователя не записываются в репозиториях метаданных репликации.

    Важно

    Чтобы подключиться к источнику с помощью учетной записи пользователя репликации, аутентифицирующейся с помощью плагина caching_sha2_password, необходимо настроить защищённое подключение, как описано в Разделе 19.3.1, «Настройка репликации с использованием шифрованных подключений», или включить незащищённое подключение для поддержки обмена паролями с помощью пары ключей RSA. Плагин аутентификации caching_sha2_password является стандартным для новых пользователей (см. Раздел 8.4.1.1, «Плагин аутентификации с кэшированием SHA-2»). Если учетная запись пользователя, созданная или используемая для репликации, использует этот плагин аутентификации, и вы не используете защищённое подключение, необходимо включить обмен паролями на основе пары ключей RSA для успешного подключения. Это можно сделать с помощью параметра SOURCE_PUBLIC_KEY_PATH или параметра GET_SOURCE_PUBLIC_KEY=1 для этого запроса.

  • SOURCE_ZSTD_COMPRESSION_LEVEL = level

    Уровень сжатия для подключений к серверу источника репликации, использующих алгоритм сжатия zstd. Разрешённые уровни находятся в диапазоне от 1 до 22, причём более высокие значения соответствуют более высокому уровню сжатия. Значение по умолчанию — 3.

    Настройка уровня сжатия не влияет на подключения, не использующие сжатие zstd. Дополнительную информацию см. в Разделе 6.2.8, «Управление сжатием подключений».

Примеры

CHANGE REPLICATION SOURCE TO полезен для настройки реплики, когда у вас есть моментальное изображение источника и записаны координаты бинарного журнала источника, соответствующие времени создания моментального изображения. После загрузки моментального изображения в реплику для синхронизации с источником, вы можете запустить CHANGE REPLICATION SOURCE TO SOURCE_LOG_FILE='log_name', SOURCE_LOG_POS=log_pos на реплике, чтобы указать координаты, с которых реплика должна начать чтение бинарного журнала источника. Следующий пример меняет сервер источника, используемый репликой, и устанавливает координаты бинарного журнала источника, с которых реплика начинает чтение:

CHANGE REPLICATION SOURCE TO
  SOURCE_HOST='source2.example.com',
  SOURCE_USER='replication',
  SOURCE_PASSWORD='password',
  SOURCE_PORT=3306,
  SOURCE_LOG_FILE='source2-bin.001',
  SOURCE_LOG_POS=4,
  SOURCE_CONNECT_RETRY=10;

Процедура переключения существующей реплики на новый источник во время переключения функций аварийного восстановления описана в Разделе 19.4.8, «Переключение источников во время аварийного переключения».

При использовании GTID на источнике и реплике укажите автоматическое позиционирование GTID вместо указания позиции файла бинарного журнала, как в следующем примере. Полные инструкции по конфигурации и запуску репликации на основе GTID на новых или остановленных серверах, активных серверах или дополнительных репликах см. в Разделе 19.1.3, «Репликация с глобальными идентификаторами транзакций».

CHANGE REPLICATION SOURCE TO
  SOURCE_HOST='source3.example.com',
  SOURCE_USER='replication',
  SOURCE_PASSWORD='password',
  SOURCE_PORT=3306,
  SOURCE_AUTO_POSITION = 1,
  FOR CHANNEL "source_3";

В этом примере используется многоисточниковая репликация, и запрос CHANGE REPLICATION SOURCE TO применяется к каналу репликации "source_3", который подключает реплику к указанному хосту. Инструкции по настройке многоисточниковой репликации см. в Разделе 19.1.5, «Многоисточниковая репликация MySQL».

Следующий пример показывает, как заставить реплику применять транзакции из файлов журналов перенаправления, которые необходимо повторить. Для этого источник не должен быть доступен. Вы можете использовать CHANGE REPLICATION SOURCE TO для определения позиции журнала перенаправления, с которой реплика должна начать повторное применение транзакций, а затем запустить поток SQL:

CHANGE REPLICATION SOURCE TO
  RELAY_LOG_FILE='replica-relay-bin.006',
  RELAY_LOG_POS=4025;
START REPLICA SQL_THREAD;

CHANGE REPLICATION SOURCE TO также можно использовать для пропуска транзакций в бинарном журнале, которые вызывают остановку репликации. Соответствующий метод зависит от того, используются ли GTID или нет. Инструкции по пропуску транзакций с помощью CHANGE REPLICATION SOURCE TO или другого метода см. в Разделе 19.1.7.3, «Пропуск транзакций».

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

Spec-Zone.ru

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