Spec-Zone.ru › MySQL 5.7

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 channel позволяет указать, к какому каналу репликации применяется оператор. Указание фразы FOR CHANNEL channel применяет оператор START 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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/start-slave.html

Spec-Zone.ru

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