Spec-Zone.ru › MySQL 8.4

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 (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 8.4 эти разрывы могут быть устранены с помощью автоматической позиционирования по GTID.

Следующие опции доступны для заявлений CHANGE REPLICATION SOURCE TO:

  • 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_applier), у которого есть только поток применителя и нет потока получателя, это происходит, если поток применителя остановлен, но с этим каналом вы не можете использовать параметры RELAY_LOG_FILE и RELAY_LOG_POS.

  • REQUIRE_ROW_FORMAT = {0|1}

    Разрешает обработку только событий репликации на основе строк каналом репликации. Этот параметр предотвращает выполнение применителя репликации таких действий, как создание временных таблиц и выполнение запросов LOAD DATA INFILE, что повышает безопасность канала. Параметр REQUIRE_ROW_FORMAT по умолчанию отключен для каналов асинхронной репликации, но включен по умолчанию для каналов группы репликации и не может быть отключен для них. Более подробную информацию см. в разделе 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.20.11 «Сгенерированные невидимые первичные ключи» для получения дополнительной информации.

      GENERATE несовместим с групповой репликацией; вы можете использовать ON, OFF или STREAM.

    Расхождение, основанное на наличии сгенерированного невидимого первичного ключа только в таблице источника или реплики, поддерживается MySQL Replication, если источник поддерживает GIPK, а реплика использует MySQL версии 8.0.32 или более поздней. Если вы используете GIPK на реплике, а источник использует более раннюю версию 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 (применитель) и ввода/вывода (получатель) остановлены.

    И на реплике, и на источнике должны быть включены GTID (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.

  • 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 и также может использоваться для экономии пропускной способности. Если вы делаете это в сочетании со сжатием соединения, сжатие соединения имеет меньше возможностей действовать на данные, но всё ещё может сжимать заголовки и те события и payloads транзакций, которые не сжаты. Дополнительную информацию о сжатии транзакций журналов двоичных логов см. в Разделе 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 асинхронное переключение источников подключения для реплик автоматически активируется, если этот канал репликации находится на первичном сервере Групповой репликации в группе в режиме единой первичной. При активной этой функции, если первичный сервер, выполняющий репликацию, выходит из строя или переходит в состояние ошибки, новый первичный сервер запускает репликацию в том же канале при его избрании. Если вы хотите использовать эту функцию, этот канал репликации также должен быть настроен на всех вторичных серверах в группе репликации и на любых новых присоединяющихся участниках. (Если серверы развернуты с помощью функции клонирования MySQL, всё это происходит автоматически.) Если вы не хотите использовать эту функцию, отключите её, используя функцию group_replication_disable_member_action() для отключения действия участника Групповой репликации 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 Server, таблицах 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 для клиента, как описано в Параметрах команды для шифрованных соединений. При использовании SOURCE_SSL=1 попытка подключения завершается успешно только в случае успешного установления шифрованного соединения. Соединение репликации не переключается на нешифрованное соединение, поэтому нет параметра, соответствующего параметру --ssl-mode=PREFERRED для репликации. Если установлено SOURCE_SSL=0, это соответствует --ssl-mode=DISABLED.

    Важно

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

END_OF_DOCUMENT_MARKER
  • 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 символов.

    Для Group Replication эта учетная запись должна существовать на каждом члене группы репликации. Она используется для распределенного восстановления, если для группы используется стек коммуникаций 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.2, «Caching SHA-2 Pluggable Authentication»). Если учетная запись пользователя, которую вы создаете или используете для репликации, использует этот плагин аутентификации, и вы не используете защищенное подключение, необходимо включить обмен паролями на основе пары ключей 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-8.4-en/change-replication-source-to.html

Spec-Zone.ru

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