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
-строка позволяет указать, к какому каналу репликации относится заявление. Использование channelFOR CHANNEL
-строки применяет заявление channelCHANGE 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
-строки. Дополнительную информацию см. в Разделе 19.2.2, «Каналы репликации». channel
Для некоторых опций заявления 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).назначает GTID, включающий указанный UUID, например, настройкуuuidserver_uuidдля сервера источника репликации. Использование нелокального UUID позволяет различать транзакции, исходящие от реплики и транзакции, исходящие от источника, а для реплики с несколькими источниками — между транзакциями, исходящими от различных источников. Выбранный вами UUID имеет значение только для собственного использования реплики. Если у любой из транзакций, отправленных источником, уже есть GTID, этот GTID сохраняется.Специфические каналы для Group Replication не могут использовать
ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS, но асинхронный канал репликации для другого источника на экземпляре сервера, являющемся членом группы Group Replication, может это делать. В этом случае не указывайте имя группы Group Replication в качестве UUID для создания GTID.Чтобы установить
ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONSв значениеLOCALили, реплика должна иметь настройкуuuidgtid_mode=ON, и это значение нельзя изменить после этого. Этот параметр предназначен для использования с источником, который имеет репликацию на основе позиции файла журнала двоичных логов, поэтомуSOURCE_AUTO_POSITION=1нельзя установить для канала. Перед установкой этого параметра необходимо остановить как поток SQL репликации, так и поток ввода-вывода репликации (приемник).ВажноРеплика, настроенная с
ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONSна любом канале, не может быть повышена до уровня, заменяющего сервер источника репликации в случае необходимости переключения, а резервная копия, взятая с реплики, не может быть использована для восстановления сервера источника репликации. Такое же ограничение относится к замене или восстановлению других реплик, которые используютASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONSна любом канале.Дополнительные ограничения и информация см. в разделе 19.1.3.6, «Репликация из источника без GTID на реплику с GTID».
-
Включает обмен паролями на основе пар ключей RSA, запрашивая открытый ключ у источника. Параметр по умолчанию отключён.
Этот параметр применяется к репликам, которые аутентифицируются с помощью плагина аутентификации
caching_sha2_password. Для подключений от учётных записей, которые аутентифицируются с помощью этого плагина, источник не отправляет открытый ключ, если его не запросить, поэтому его нужно запросить или указать в клиенте. ЕслиSOURCE_PUBLIC_KEY_PATHуказан и содержит корректный файл открытого ключа, он имеет приоритет передGET_SOURCE_PUBLIC_KEY. Если вы используете учётную запись репликации, которая аутентифицируется с помощью плагинаcaching_sha2_password(по умолчанию), и не используете безопасное соединение, вы должны указать либо этот параметр, либо параметрSOURCE_PUBLIC_KEY_PATHдля предоставления открытого ключа RSA реплике. -
Прекращает сохранение имён файлов и позиций файлов в репликационных хранилищах метаданных.
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. -
Разрешает обработку только событий репликации на основе строк каналом репликации. Этот параметр предотвращает выполнение применителя репликации таких действий, как создание временных таблиц и выполнение запросов
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 «Проверка привилегий репликации». -
Заставляет реплику пытаться подключиться к источнику с использованием функции автоматического позиционирования репликации на основе 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 «Переключение источников и реплик с асинхронным переключением источников подключения».ВажноВы можете установить
SOURCE_CONNECTION_AUTO_FAILOVER = 1только при использовании автоматического позиционирования GTID (SOURCE_AUTO_POSITION = 1).При установке
SOURCE_CONNECTION_AUTO_FAILOVER = 1, установитеSOURCE_RETRY_COUNTиSOURCE_CONNECT_RETRY=10на минимальные значения, которые просто позволяют несколько попыток повторного подключения к одному и тому же источнику в случае, если сбой подключения вызван временным сбоем сети. В противном случае механизм асинхронного переключения источников подключения не сможет активироваться своевременно. Подходящие значения —SOURCE_RETRY_COUNT=3иSOURCE_CONNECT_RETRY=10, что заставит реплику повторить подключение 3 раза с интервалами 10 секунд между попытками.При установке
SOURCE_CONNECTION_AUTO_FAILOVER = 1репозитории метаданных репликации должны содержать учетные данные для учетной записи пользователя репликации, которые могут использоваться для подключения ко всем серверам в списке источников для канала репликации. Учетная запись также должна иметь разрешенияSELECTна таблицы схемы производительности. Эти учетные данные можно установить с помощью оператораCHANGE REPLICATION SOURCE TOс опциямиSOURCE_USERиSOURCE_PASSWORD. Дополнительную информацию см. в Разделе 19.4.9 «Переключение источников и реплик с асинхронным переключением источников подключения».При установке
SOURCE_CONNECTION_AUTO_FAILOVER = 1асинхронное переключение источников подключения для реплик автоматически активируется, если этот канал репликации находится на первичном сервере Групповой репликации в группе в режиме единой первичной. При активной этой функции, если первичный сервер, выполняющий репликацию, выходит из строя или переходит в состояние ошибки, новый первичный сервер запускает репликацию в том же канале при его избрании. Если вы хотите использовать эту функцию, этот канал репликации также должен быть настроен на всех вторичных серверах в группе репликации и на любых новых присоединяющихся участниках. (Если серверы развернуты с помощью функции клонирования MySQL, всё это происходит автоматически.) Если вы не хотите использовать эту функцию, отключите её, используя функциюgroup_replication_disable_member_action()для отключения действия участника Групповой репликацииmysql_start_failover_channels_if_primary, которое включено по умолчанию. Дополнительную информацию см. в Разделе 19.4.9.2 «Асинхронное переключение источников подключения для реплик».
-
Указывает, на сколько секунд реплика должна отставать от источника. Событие, полученное от источника, не выполняется, пока не пройдет как минимум
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 Schemareplication_connection_configuration.Системная переменная
replica_net_timeoutуказывает количество секунд, которое реплика ожидает дополнительных данных или сигнала «биения сердца» от источника, прежде чем считает соединение разорванным, прерывает чтение и пытается повторно подключиться. Значение по умолчанию — 60 секунд (одна минута). Обратите внимание, что изменение значения или значения по умолчаниюreplica_net_timeoutне автоматически изменяет интервал между сигналами «биения сердца», независимо от того, был ли он установлен явно или используется ранее рассчитанное значение по умолчанию. Если вы установите глобальное значениеreplica_net_timeoutна значение, меньшее, чем текущий интервал между сигналами «биения сердца», будет выведено предупреждение. Еслиreplica_net_timeoutизменено, необходимо также выполнитьCHANGE REPLICATION SOURCE TO, чтобы отрегулировать интервал между сигналами «биения сердца» до подходящего значения, чтобы сигнал «биения сердца» происходил до таймаута соединения. В противном случае сигнал «биения сердца» не оказывает никакого влияния, и если данные от источника не получены, реплика может неоднократно пытаться подключиться, создавая дублирующие потоки «зомби». -
Имя хоста или 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 (применяющий) отстал по сравнению с потоком репликации ввода/вывода (приёмник). -
Пароль учётной записи пользователя репликации для подключения к серверу репликации-источника. Максимальная длина строкового значения — 32 символа. Если вы укажете
SOURCE_PASSWORD, тоSOURCE_USERтакже требуется.Пароль, используемый для учётной записи пользователя репликации в операторе
CHANGE REPLICATION SOURCE TO, ограничен 32 символами. Попытка использовать пароль длиной более 32 символов приведет к ошибке в оператореCHANGE REPLICATION SOURCE TO.Пароль замаскирован в журналах MySQL Server, таблицах Performance Schema и операторах
SHOW PROCESSLIST. -
Номер 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. -
Устанавливает максимальное количество попыток повторного подключения, которые реплика выполняет после таймаута соединения с источником, определяемого системной переменной
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 Schemareplication_connection_configuration. ПараметрSOURCE_RETRY_COUNTзаменяет параметр запуска сервера--master-retry-count. -
Указывает, шифрует ли реплика соединение репликации. Значение по умолчанию — 0, что означает, что реплика не шифрует соединение репликации. Если вы установите
SOURCE_SSL=1, вы можете настроить шифрование, используя параметрыSOURCE_SSL_иxxxSOURCE_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 для сервера надёжно доступен реплике, иначе возникнут проблемы с доступностью. По этой причине они не установлены по умолчанию.
-
SOURCE_SSL_,xxxSOURCE_TLS_xxxУкажите, как реплика использует шифрование и алгоритмы для обеспечения безопасности подключения репликации. Эти параметры можно изменить даже на репликах, скомпилированных без поддержки SSL. Они сохраняются в репозитории метаданных источника, но игнорируются, если поддержка SSL на реплике не включена. Максимальная длина значения для строковых параметров
SOURCE_SSL_иxxxSOURCE_TLS_составляет 511 символов, за исключениемxxxSOURCE_TLS_CIPHERSUITES, для которого она равна 4000 символам.Параметры
SOURCE_SSL_иxxxSOURCE_TLS_выполняют те же функции, что и параметры клиентаxxx--ssl-иxxx--tls-, описанные в Параметрах команд для шифрованных подключений. Соответствие между двумя наборами параметров, а также использование параметровxxxSOURCE_SSL_иxxxSOURCE_TLS_для настройки защищенного соединения, поясняется в разделе 19.3.1, «Настройка репликации с использованием шифрованных подключений».xxx -
Имя пользователя для учетной записи пользователя репликации, используемой для подключения к серверу источника репликации. Максимальная длина строкового значения составляет 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.