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_applier) не имеет потока приёмника, только поток применителя.
Команды CHANGE REPLICATION SOURCE TO имеют ряд побочных эффектов и взаимодействий, о которых следует знать:
CHANGE REPLICATION SOURCE TOвызывает неявное подтверждение текущей транзакции. См. Раздел 15.3.3, «Команды, вызывающие неявное подтверждение».CHANGE REPLICATION SOURCE TOвызывает запись предыдущих значенийSOURCE_HOST,SOURCE_PORT,SOURCE_LOG_FILEиSOURCE_LOG_POSв журнал ошибок, вместе с другой информацией о состоянии реплики до выполнения.При использовании репликации на основе команд и временных таблиц, команда
CHANGE REPLICATION SOURCE TOпослеSTOP REPLICAможет оставить временные таблицы на реплике. В таких случаях выводится предупреждение (). Чтобы избежать этого, убедитесь, что значение системной переменной состоянияReplica_open_temp_tablesравно 0 до выполнения командыCHANGE REPLICATION SOURCE TO.При использовании многопоточной реплики (
replica_parallel_workers> 0), остановка реплики может привести к разрывам в последовательности транзакций, выполняемых из журнала ретрансляции, независимо от того, была ли остановка преднамеренной или нет. В MySQL 9.2 эти разрывы можно устранить с помощью автоматического позиционирования GTID.
Доступны следующие параметры для команд CHANGE REPLICATION SOURCE TO:
-
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 (group_replication_applier), который имеет только поток приемника, а не поток получателя, это имеет место, если поток приемника остановлен, но с этим каналом вы не можете использовать параметрыRELAY_LOG_FILEиRELAY_LOG_POS. -
Разрешает обработку только событий репликации на основе строк каналом репликации. Этот параметр предотвращает выполнение операциями приемника репликации таких действий, как создание временных таблиц и выполнение запросов
LOAD DATA INFILE, что повышает безопасность канала. ПараметрREQUIRE_ROW_FORMATпо умолчанию отключен для асинхронных каналов репликации, но включен по умолчанию для каналов Group Replication и не может быть отключен для них. Дополнительные сведения см. в разделе 19.3.3, «Проверка привилегий репликации». -
REQUIRE_TABLE_PRIMARY_KEY_CHECK = {STREAM | ON | OFF | GENERATE}Этот параметр позволяет реплике установить собственные правила для проверки первичных ключей следующим образом:
ON: Реплика устанавливает значениеsql_require_primary_key = ON; любой реплицированный операторCREATE TABLEилиALTER TABLEдолжен привести к таблице, содержащей первичный ключ.OFF: Реплика устанавливает значениеsql_require_primary_key = OFF; реплицированный операторCREATE TABLEилиALTER TABLEне проверяется на наличие первичного ключа.STREAM: Реплика использует любое значениеsql_require_primary_key, реплицированное со источника для каждой транзакции. Это значение по умолчанию и поведение по умолчанию.-
GENERATE: Заставляет реплику генерировать невидимый первичный ключ для любой таблицыInnoDB, которая, при репликации, не имеет первичного ключа. См. раздел 15.1.21.11, «Сгенерированные невидимые первичные ключи» для получения дополнительной информации.GENERATEнесовместим с Group Replication; вы можете использоватьON,OFFилиSTREAM.
Различие на основе наличия сгенерированного невидимого первичного ключа только в таблице источника или реплики поддерживается репликацией MySQL, если источник поддерживает GIPKs, а реплика использует версию MySQL 8.0.32 или новее. Если вы используете GIPKs на реплике, а источник использует более раннюю версию MySQL, такие различия в схеме, кроме дополнительного GIPK на реплике, не поддерживаются и могут привести к ошибкам репликации.
Для репликации с несколькими источниками, установка
REQUIRE_TABLE_PRIMARY_KEY_CHECKнаONилиOFFпозволяет реплике нормализовать поведение по каналам репликации для различных источников и поддерживать согласованное значение дляsql_require_primary_key. ИспользованиеONзащищает от случайной потери первичных ключей, когда несколько источников обновляют один и тот же набор таблиц. ИспользованиеOFFпозволяет источникам, которые могут изменять первичные ключи, работать вместе с источниками, которые не могут.В случае нескольких реплик, когда
REQUIRE_TABLE_PRIMARY_KEY_CHECKустановлено наGENERATE, сгенерированный невидимый первичный ключ, добавленный данной репликой, независим от любого такого ключа, добавленного на любой другой реплике. Это означает, что если сгенерированные невидимые первичные ключи используются, значения в столбцах сгенерированного первичного ключа на разных репликах не гарантируются одинаковыми. Это может быть проблемой при переключении на такую реплику.Когда
PRIVILEGE_CHECKS_USERустановлено наNULL(по умолчанию), учетной записи пользователя не требуются привилегии администрирования для установки ограниченных переменных сеанса. Установка этого параметра на значение, отличное отNULL, означает, что когдаREQUIRE_TABLE_PRIMARY_KEY_CHECKустановлено наON,OFFилиGENERATE, учетной записи пользователя не требуются привилегии администрирования сеанса для установки ограниченных переменных сеанса, таких какsql_require_primary_key, избегая необходимости предоставления учетной записи таких привилегий. Дополнительные сведения см. в разделе 19.3.3, «Проверка привилегий репликации». -
Позволяет реплике пытаться подключиться к источнику, используя функцию автоматического позиционирования репликации на основе GTID, а не позицию на основе файла двоичного журнала. Этот параметр используется для запуска реплики с использованием репликации на основе GTID. Значение по умолчанию - 0, что означает, что автоматическое позиционирование GTID и репликация на основе GTID не используются. Этот параметр можно использовать с
CHANGE REPLICATION SOURCE TOтолько в том случае, если оба потока (приемник SQL репликации и поток I/O репликации) остановлены.И на реплике, и на источнике должны быть включены GTIDs (
GTID_MODE=ON,ON_PERMISSIVE,илиOFF_PERMISSIVEна реплике, иGTID_MODE=ONна источнике).SOURCE_LOG_FILE,SOURCE_LOG_POS,RELAY_LOG_FILEиRELAY_LOG_POSне могут быть указаны вместе сSOURCE_AUTO_POSITION = 1. Если на реплике включена репликация с несколькими источниками, необходимо установить параметрSOURCE_AUTO_POSITION = 1для каждого соответствующего канала репликации.При установленном
SOURCE_AUTO_POSITION = 1в начальном рукопожатии реплика отправляет набор GTID, содержащий транзакции, которые она уже получила, подтвердила или и то, и другое. Источник отвечает, отправляя все транзакции, записанные в его двоичном журнале, GTID которых не входит в набор GTID, отправленный репликой. Это обмен гарантирует, что источник отправляет только транзакции с GTID, которые реплика еще не зафиксировала или подтвердила. Если реплика получает транзакции от более чем одного источника, как в случае топологии "алмаз", функция автоматического пропуска гарантирует, что транзакции не будут применены дважды. Подробности о том, как вычисляется набор GTID, отправленный репликой, см. в разделе 19.1.3.3, «Автоматическое позиционирование GTID».Если какие-либо транзакции, которые должны быть отправлены источником, были удалены из двоичного журнала источника или добавлены в набор GTID в переменной системы
gtid_purgedдругим способом, источник отправляет ошибку реплике, и репликация не начинается. GTID отсутствующих удаленных транзакций идентифицируются и перечисляются в журнале ошибок источника в сообщении об ошибке. Кроме того, если во время обмена транзакциями обнаружится, что реплика зафиксировала или подтвердила транзакции с UUID источника в GTID, но сам источник их не подтвердил, источник отправляет ошибку реплике, и репликация не начинается. Подробности о том, как обрабатывать эти ситуации, см. в разделе 19.1.3.3, «Автоматическое позиционирование GTID».Вы можете проверить, работает ли репликация с включенным автоматическим позиционированием GTID, проверив таблицу Performance Schema
replication_connection_statusили вывод оператораSHOW REPLICA STATUS. Отключение параметраSOURCE_AUTO_POSITIONвернет реплику к файловой репликации.
-
SOURCE_BIND = 'interface_name'Определяет, какой сетевой интерфейс реплики используется для подключения к источнику, если у реплики несколько сетевых интерфейсов. Укажите IP-адрес сетевого интерфейса. Максимальная длина строкового значения — 255 символов.
IP-адрес, настроенный с помощью этого параметра, при его наличии, отображается в столбце
Source_Bindвывода изSHOW REPLICA STATUS. В таблице метаданных источникаmysql.slave_master_infoзначение отображается в столбцеSource_bind. Поддержка привязки реплики к конкретному сетевому интерфейсу также реализована в NDB Cluster. -
SOURCE_COMPRESSION_ALGORITHMS = 'algorithm[,algorithm][,algorithm]'Указывает один, два или три разрешенных алгоритма сжатия для подключений к серверу источника репликации, разделенные запятыми. Максимальная длина строкового значения — 99 символов. Значение по умолчанию —
uncompressed.Доступные алгоритмы —
zlib,zstdиuncompressed, такие же, как для системной переменнойprotocol_compression_algorithms. Алгоритмы можно указывать в любом порядке, но это не порядок предпочтения — процесс согласования алгоритмов пытается использоватьzlib, затемzstd, затемuncompressed, если они указаны.Значение
SOURCE_COMPRESSION_ALGORITHMSприменяется только в том случае, если системная переменнаяreplica_compressed_protocolотключена. Еслиreplica_compressed_protocolвключена, она имеет приоритет надSOURCE_COMPRESSION_ALGORITHMS, и подключения к источнику используют сжатиеzlib, если оба, источник и реплика, поддерживают этот алгоритм. Дополнительную информацию см. в разделе 6.2.8 «Управление сжатием подключений».Сжатие транзакций лога двоичных данных активируется системной переменной
binlog_transaction_compressionи также может использоваться для экономии пропускной способности. Если вы делаете это в сочетании со сжатием подключений, сжатие подключений имеет меньше возможностей для обработки данных, но все еще может сжимать заголовки и те события и фрагменты транзакций, которые не сжаты. Дополнительную информацию о сжатии транзакций лога двоичных данных см. в разделе 7.4.4.5 «Сжатие транзакций лога двоичных данных». -
SOURCE_CONNECT_RETRY =intervalУказывает интервал в секундах между попытками повторного подключения реплики после истечения срока подключения к источнику. Значение по умолчанию — 60.
Количество попыток ограничено параметром
SOURCE_RETRY_COUNT. Если используются оба значения по умолчанию, реплика ждет 60 секунд между попытками повторного подключения (SOURCE_CONNECT_RETRY=60) и продолжает попытки повторного подключения с такой скоростью в течение 10 минут (SOURCE_RETRY_COUNT=10). Эти значения записываются в репозиторий метаданных источника и отображаются в таблице схемы производительностиreplication_connection_configuration. -
SOURCE_CONNECTION_AUTO_FAILOVER = {0|1}Активирует механизм асинхронного переключения источника подключения для канала репликации, если доступны один или несколько альтернативных серверов источника репликации (когда существует несколько серверов MySQL или групп серверов, которые разделяют реплицированные данные). Значение по умолчанию — 0, что означает, что механизм не активирован. Полную информацию и инструкции по настройке этой функции см. в разделе 19.4.9.2 «Асинхронное переключение источников подключения для реплик».
Механизм асинхронного переключения подключения берет на себя контроль после того, как исчерпаны попытки повторного подключения, управляемые
SOURCE_CONNECT_RETRYиSOURCE_RETRY_COUNT. Он переподключает реплику к альтернативному источнику, выбранному из указанного списка источников, которым вы можете управлять с помощью функцийasynchronous_connection_failover_add_source()иasynchronous_connection_failover_delete_source(). Для добавления и удаления управляемых групп серверов используйтеasynchronous_connection_failover_add_managed()иasynchronous_connection_failover_delete_managed()соответственно. Дополнительную информацию см. в разделе 19.4.9 «Переключение источников и реплик с помощью асинхронного переключения подключения».ВажноВы можете задать
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асинхронное переключение подключения для реплик автоматически активируется, если этот канал репликации находится на первичном сервере Group Replication в группе в режиме одиночного первичного сервера. При активации этой функции, если первичный сервер, который выполняет репликацию, выходит из строя или попадает в состояние ошибки, новый первичный сервер начинает репликацию в том же канале, когда он избран. Если вы хотите использовать функцию, этот канал репликации также должен быть настроен на всех вторичных серверах в группе репликации и на всех новых присоединившихся участниках. (Если серверы развернуты с помощью функции клонирования MySQL, все это происходит автоматически). Если вы не хотите использовать функцию, отключите ее, используя функциюgroup_replication_disable_member_action()для отключения действия участника Group Replicationmysql_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, таблицах 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для клиента, как описано в Command Options for Encrypted Connections. При установкеSOURCE_SSL=1попытка подключения удастся только при установлении защищённого соединения. Соединение репликации не переключается на незашифрованное соединение, поэтому нет параметра, соответствующего параметру--ssl-mode=PREFERREDдля репликации. ЕслиSOURCE_SSL=0установлено, это соответствует--ssl-mode=DISABLED.ВажноДля предотвращения сложных атак «человек посередине» важно, чтобы реплика проверяла подлинность сервера. Вы можете указать дополнительные параметры
SOURCE_SSL_, которые соответствуют настройкамxxx--ssl-mode=VERIFY_CAи--ssl-mode=VERIFY_IDENTITY, которые являются лучшим выбором, чем значение по умолчанию для предотвращения этого типа атаки. С этими настройками реплика проверяет, что сертификат сервера действителен, и проверяет, что имя хоста, используемое репликой, соответствует идентификатору в сертификате сервера. Для реализации одного из этих уровней проверки необходимо сначала убедиться, что сертификат удостоверяющего центра (CA) сервера надёжно доступен реплике, иначе это приведёт к проблемам с доступностью. По этой причине они не являются значениями по умолчанию.
-
SOURCE_SSL_,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 символов.
Для групповой репликации эта учетная запись должна существовать на каждом члене группы репликации. Она используется для распределённого восстановления, если для группы используется стек коммуникаций XCom, а также для подключений к группе, если используется стек коммуникаций MySQL. При использовании стека коммуникаций MySQL учетная запись должна иметь разрешение
GROUP_REPLICATION_STREAM.Можно задать пустое имя пользователя, указав
SOURCE_USER='', но канал репликации не может быть запущен с пустым именем пользователя. Действительно задать пустое имя пользователяSOURCE_USERи использовать канал впоследствии, если вы всегда предоставляете учетные данные пользователя с помощью инструкцииSTART REPLICAили инструкцииSTART GROUP_REPLICATION, которые запускают канал репликации. Этот подход означает, что для перезапуска канала репликации всегда требуется вмешательство оператора, но учетные данные пользователя не записываются в репозиториях метаданных репликации.ВажноЧтобы подключиться к источнику с помощью учетной записи пользователя репликации, аутентифицирующейся с помощью плагина
caching_sha2_password, необходимо настроить защищённое подключение, как описано в Разделе 19.3.1, «Настройка репликации с использованием шифрованных подключений», или включить незащищённое подключение для поддержки обмена паролями с помощью пары ключей RSA. Плагин аутентификацииcaching_sha2_passwordявляется стандартным для новых пользователей (см. Раздел 8.4.1.1, «Плагин аутентификации с кэшированием SHA-2»). Если учетная запись пользователя, созданная или используемая для репликации, использует этот плагин аутентификации, и вы не используете защищённое подключение, необходимо включить обмен паролями на основе пары ключей RSA для успешного подключения. Это можно сделать с помощью параметраSOURCE_PUBLIC_KEY_PATHили параметраGET_SOURCE_PUBLIC_KEY=1для этого запроса. -
SOURCE_ZSTD_COMPRESSION_LEVEL =levelУровень сжатия для подключений к серверу источника репликации, использующих алгоритм сжатия
zstd. Разрешённые уровни находятся в диапазоне от 1 до 22, причём более высокие значения соответствуют более высокому уровню сжатия. Значение по умолчанию — 3.Настройка уровня сжатия не влияет на подключения, не использующие сжатие
zstd. Дополнительную информацию см. в Разделе 6.2.8, «Управление сжатием подключений».
Примеры
CHANGE REPLICATION SOURCE TO полезен для настройки реплики, когда у вас есть моментальное изображение источника и записаны координаты бинарного журнала источника, соответствующие времени создания моментального изображения. После загрузки моментального изображения в реплику для синхронизации с источником, вы можете запустить CHANGE REPLICATION SOURCE TO
SOURCE_LOG_FILE=' на реплике, чтобы указать координаты, с которых реплика должна начать чтение бинарного журнала источника. Следующий пример меняет сервер источника, используемый репликой, и устанавливает координаты бинарного журнала источника, с которых реплика начинает чтение: log_name',
SOURCE_LOG_POS=log_pos
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='source2.example.com',
SOURCE_USER='replication',
SOURCE_PASSWORD='password',
SOURCE_PORT=3306,
SOURCE_LOG_FILE='source2-bin.001',
SOURCE_LOG_POS=4,
SOURCE_CONNECT_RETRY=10;
Процедура переключения существующей реплики на новый источник во время переключения функций аварийного восстановления описана в Разделе 19.4.8, «Переключение источников во время аварийного переключения».
При использовании GTID на источнике и реплике укажите автоматическое позиционирование GTID вместо указания позиции файла бинарного журнала, как в следующем примере. Полные инструкции по конфигурации и запуску репликации на основе GTID на новых или остановленных серверах, активных серверах или дополнительных репликах см. в Разделе 19.1.3, «Репликация с глобальными идентификаторами транзакций».
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='source3.example.com',
SOURCE_USER='replication',
SOURCE_PASSWORD='password',
SOURCE_PORT=3306,
SOURCE_AUTO_POSITION = 1,
FOR CHANNEL "source_3";
В этом примере используется многоисточниковая репликация, и запрос CHANGE REPLICATION SOURCE TO применяется к каналу репликации "source_3", который подключает реплику к указанному хосту. Инструкции по настройке многоисточниковой репликации см. в Разделе 19.1.5, «Многоисточниковая репликация MySQL».
Следующий пример показывает, как заставить реплику применять транзакции из файлов журналов перенаправления, которые необходимо повторить. Для этого источник не должен быть доступен. Вы можете использовать CHANGE REPLICATION SOURCE TO для определения позиции журнала перенаправления, с которой реплика должна начать повторное применение транзакций, а затем запустить поток SQL:
CHANGE REPLICATION SOURCE TO
RELAY_LOG_FILE='replica-relay-bin.006',
RELAY_LOG_POS=4025;
START REPLICA SQL_THREAD;
CHANGE REPLICATION SOURCE TO также можно использовать для пропуска транзакций в бинарном журнале, которые вызывают остановку репликации. Соответствующий метод зависит от того, используются ли GTID или нет. Инструкции по пропуску транзакций с помощью CHANGE REPLICATION SOURCE TO или другого метода см. в Разделе 19.1.7.3, «Пропуск транзакций».
© 2025 Oracle
Licensed under the GPLv2 License.