13.4.2.5 Оператор START SLAVE
START SLAVE [thread_types] [until_option] [connection_options] [channel_option]
thread_types:
[thread_type [, thread_type] ... ]
thread_type:
IO_THREAD | SQL_THREAD
until_option:
UNTIL { {SQL_BEFORE_GTIDS | SQL_AFTER_GTIDS} = gtid_set
| MASTER_LOG_FILE = 'log_name', MASTER_LOG_POS = log_pos
| RELAY_LOG_FILE = 'log_name', RELAY_LOG_POS = log_pos
| SQL_AFTER_MTS_GAPS }
connection_options:
[USER='user_name'] [PASSWORD='user_pass'] [DEFAULT_AUTH='plugin_name'] [PLUGIN_DIR='plugin_dir']
channel_option:
FOR CHANNEL channel
gtid_set:
uuid_set [, uuid_set] ...
| ''
uuid_set:
uuid:interval[:interval]...
uuid:
hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh
h:
[0-9,A-F]
interval:
n[-n]
(n >= 1)
START SLAVE запускает потоки репликации, либо вместе, либо по отдельности. Для выполнения оператора требуется привилегия SUPER. START
SLAVE вызывает неявное подтверждение текущей транзакции (см. Раздел 13.3.3, «Операторы, вызывающие неявное подтверждение»).
Для типов потоков можно указать IO_THREAD, SQL_THREAD, оба этих типа или ни один из них. Только запущенные потоки будут затронуты оператором.
START SLAVEбез опций типа потока запускает все потоки репликации, как иSTART SLAVEс обеими опциями типа потока.IO_THREADзапускает поток репликации-приёмника, который считывает события с сервера-источника и сохраняет их в журнале ретрансляции.SQL_THREADзапускает поток репликации-применителя, который считывает события из журнала ретрансляции и выполняет их. Мультипотоковый репликатор (сslave_parallel_workers> 0) применяет транзакции с помощью координационного потока и нескольких потоков-применителей, иSQL_THREADзапускает все эти потоки.
START SLAVE отправляет подтверждение пользователю после запуска всех потоков репликации. Однако поток репликации-приёмника может ещё не подключиться к источнику успешно, или поток-применитель может остановиться при применении события сразу после запуска. START
SLAVE не продолжает отслеживать потоки после их запуска, поэтому не предупреждает вас, если они впоследствии остановятся или не смогут подключиться. Необходимо проверить журнал ошибок репликации для сообщений об ошибках, сгенерированных потоками репликации, или проверить, что они работают удовлетворительно с помощью SHOW SLAVE STATUS. Успешное выполнение оператора START SLAVE заставит SHOW SLAVE STATUS отобразить Slave_SQL_Running=Yes, но он может или не может отобразить Slave_IO_Running=Yes, так как Slave_IO_Running=Yes отображается только если поток-приёмник работает и подключён. Для получения дополнительной информации см. Раздел 16.1.7.1, «Проверка состояния репликации».
Необязательная фраза FOR CHANNEL
позволяет указать, к какому каналу репликации применяется оператор. Указание фразы channelFOR CHANNEL
применяет оператор channelSTART SLAVE к определённому каналу репликации. Если фраза не указана и дополнительных каналов не существует, оператор применяется к каналу по умолчанию. Если оператор START SLAVE не определяет канал при использовании нескольких каналов, данный оператор запускает указанные потоки для всех каналов. Для получения дополнительной информации см. Раздел 16.2.2, «Каналы репликации».
Каналы репликации для Group Replication (group_replication_applier и group_replication_recovery) управляются автоматически экземпляром сервера. Единственный канал Group Replication, с которым можно взаимодействовать, это канал group_replication_applier. Этот канал имеет только поток-применителя и не имеет потока-приёмника, поэтому его можно запустить, используя опцию SQL_THREAD без опции IO_THREAD. START SLAVE вообще не может использоваться с каналом group_replication_recovery.
START SLAVE поддерживает подключаемую аутентификацию пользователя/пароля (см. Раздел 6.2.13, «Подключаемая аутентификация») с опциями USER, PASSWORD, DEFAULT_AUTH и PLUGIN_DIR, как описано в следующем списке. При использовании этих опций необходимо запустить поток-приёмника (опция IO_THREAD) или все потоки репликации; поток репликации-применителя (опция SQL_THREAD) нельзя запустить отдельно.
-
USER Имя пользователя для учётной записи. Необходимо задать это значение, если используется
PASSWORD. Опция не может быть пустой или нулевой строкой.-
PASSWORD Пароль для учётной записи указанного пользователя.
-
DEFAULT_AUTH Имя плагина аутентификации. По умолчанию используется родная аутентификация MySQL.
-
PLUGIN_DIR Путь к плагину аутентификации.
Пароль, заданный с помощью START SLAVE, маскируется при записи в журналы MySQL Server, таблицы Performance Schema и операторы SHOW
PROCESSLIST. Однако он отправляется в открытом виде по подключению к экземпляру сервера репликации. Для защиты пароля во время передачи используйте шифрование SSL/TLS, SSH-туннель или другой метод защиты подключения от несанкционированного просмотра для соединения между экземпляром сервера репликации и клиентом, используемым для выдачи оператора START SLAVE.
Фраза UNTIL заставляет репликатор начать репликацию, обработать транзакции до указанного момента во фразе UNTIL, а затем снова остановиться. Фраза UNTIL может использоваться для того, чтобы заставить репликатор продолжать работу до момента перед точкой, где вы хотите пропустить нежелательную транзакцию, а затем пропустить транзакцию, как описано в Разделе 16.1.7.3, «Пропуск транзакций». Для идентификации транзакции можно использовать mysqlbinlog с двоичным журналом источника или журналом ретрансляции репликации, или использовать оператор SHOW BINLOG EVENTS.
Также можно использовать фразу UNTIL для отладки репликации, обрабатывая транзакции по одной или по частям. Если вы используете фразу UNTIL для этого, запустите репликатор с опцией --skip-slave-start, чтобы предотвратить запуск SQL-потока при запуске сервера репликации. Удалите эту опцию после завершения процедуры, чтобы не забыть её в случае непредвиденной перезагрузки сервера.
Оператор SHOW SLAVE STATUS включает поля вывода, отображающие текущие значения условия UNTIL. Условие UNTIL действует до тех пор, пока затронутые потоки по-прежнему работают, и удаляется при их остановке.
Фраза UNTIL действует на поток репликации-применителя (опция SQL_THREAD). Можно использовать опцию SQL_THREAD или позволить репликатору по умолчанию запустить оба потока. Если используется только опция IO_THREAD, фраза UNTIL игнорируется, так как поток-применитель не запускается.
Указанная в фразе UNTIL точка может быть любой из следующих опций:
-
SOURCE_LOG_FILEиSOURCE_LOG_POS Эти параметры заставляют процесс применения репликации обрабатывать транзакции до определённой позиции в журнале репликации, идентифицируемой именем файла и позицией в файле, соответствующей точке в бинарном журнале на сервере-источнике. Поток приложения находит ближайшую границу транзакции в или после указанной позиции, завершает применение транзакции и останавливается на этом.
-
RELAY_LOG_FILEиRELAY_LOG_POS Эти параметры заставляют процесс применения репликации обрабатывать транзакции до определённой позиции в журнале репликации реплики, идентифицируемой именем файла журнала репликации и позицией в этом файле. Поток приложения находит ближайшую границу транзакции в или после указанной позиции, завершает применение транзакции и останавливается на этом.
-
SQL_BEFORE_GTIDS Этот параметр заставляет процесс применения репликации начать обработку транзакций и остановиться, когда он обнаруживает любую транзакцию в указанном наборе GTID. Обнаруженная транзакция из набора GTID не применяется, и не применяются никакие другие транзакции из набора GTID. Параметр принимает в качестве аргумента набор GTID, содержащий один или несколько глобальных идентификаторов транзакции (см. наборы GTID). Транзакции в наборе GTID не обязательно появляются в потоке репликации в порядке их GTID, поэтому транзакция, перед которой останавливается процесс применения, не обязательно является самой ранней.
-
SQL_AFTER_GTIDS -
Этот параметр заставляет процесс применения репликации начать обработку транзакций и остановиться, когда он обработает все транзакции в указанном наборе GTID. Параметр принимает в качестве аргумента набор GTID, содержащий один или несколько глобальных идентификаторов транзакции (см. наборы GTID).
При использовании
SQL_AFTER_GTIDSпотоки репликации останавливаются после обработки всех транзакций в наборе GTID. Транзакции обрабатываются в порядке получения, поэтому возможно, что это включает транзакции, которые не являются частью набора GTID, но которые получены (и обработаны) до того, как все транзакции в наборе были завершены. Например, выполнениеSTART SLAVE UNTIL SQL_AFTER_GTIDS = 3E11FA47-71CA-11E1-9E33-C80AA9429562:11-56заставляет реплику получить (и обработать) все транзакции от источника до тех пор, пока не будут обработаны все транзакции с номерами последовательности от 11 до 56, а затем остановиться, не обрабатывая никаких дополнительных транзакций после достижения этой точки.SQL_AFTER_GTIDSнесовместим с многопоточными репликами. Если этот параметр используется с многопоточной репликой, выдается предупреждение, и реплика переключается на однопоточный режим. В зависимости от конкретного случая использования, может быть возможно использоватьSTART SLAVE UNTIL MASTER_LOG_POSилиSTART SLAVE UNTIL SQL_BEFORE_GTIDSвместо этого. Вы также можете использоватьWAIT_UNTIL_SQL_THREAD_AFTER_GTIDS(), которое ожидает достижения правильной позиции, но не останавливает поток реплики. -
SQL_AFTER_MTS_GAPS -
Только для многопоточной реплики (с
slave_parallel_workers> 0) этот параметр заставляет реплику обрабатывать транзакции до тех пор, пока не будет больше пробелов в последовательности обработанных транзакций из журнала репликации. При использовании многопоточной реплики есть вероятность возникновения пробелов в следующих ситуациях:Поток координатора остановлен.
Возникает ошибка в потоках приложения.
mysqld неожиданно завершает работу.
Когда в канале репликации есть пробелы, база данных реплики находится в состоянии, которое, возможно, никогда не существовало на источнике. Реплика отслеживает пробелы внутри себя и не допускает операторов
CHANGE MASTER TO, которые удалили бы информацию о пробелах при их выполнении.Выдача
START SLAVEна многопоточной реплике с пробелами в последовательности обработанных транзакций из журнала репликации генерирует предупреждение. Для исправления этой ситуации используется решениеSTART SLAVE UNTIL SQL_AFTER_MTS_GAPS. Дополнительную информацию см. в Разделе 16.4.1.32 «Репликация и несогласованности транзакций».Если вам необходимо изменить многопоточную реплику, которая потерпела неудачу, на однопоточный режим, вы можете выполнить следующую последовательность операторов в указанном порядке:
START SLAVE UNTIL SQL_AFTER_MTS_GAPS; SET @@GLOBAL.slave_parallel_workers = 0; START SLAVE SQL_THREAD;
© 2025 Oracle
Licensed under the GPLv2 License.