16.2.3 Потоки репликации
Возможности репликации MySQL реализуются с помощью трех основных потоков: одного на сервере источнике и двух на сервере реплики:
-
Поток сброса двоичного журнала. Сервер источника создает поток для отправки содержимого двоичного журнала серверу реплики при подключении последнего. Этот поток можно идентифицировать в выводе команды
SHOW PROCESSLISTна сервере источника как потокBinlog Dump.Поток сброса двоичного журнала приобретает блокировку на двоичном журнале источника для чтения каждого события, которое должно быть отправлено реплике. Как только событие прочитано, блокировка освобождается, даже до отправки события реплике.
-
Поток ввода/вывода репликации. При выполнении команды
START SLAVEна сервере реплики, реплика создаёт поток ввода/вывода, который подключается к источнику и запрашивает отправку обновлений, записанных в его двоичных журналах.Поток ввода/вывода репликации считывает обновления, которые отправляет поток
Binlog Dumpсервера источника (см. предыдущий пункт), и копирует их в локальные файлы, составляющие релейный журнал реплики.Состояние этого потока отображается как
Slave_IO_runningв выводе командыSHOW SLAVE STATUS. Поток SQL репликации. Реплика создаёт поток SQL для чтения релейного журнала, написанного потоком ввода/вывода репликации, и выполнения транзакций, содержащихся в нём.
Для каждого соединения источник/реплика существуют три основных потока. Источник, имеющий несколько реплик, создает один поток сброса двоичного журнала для каждой подключенной реплики, а каждая реплика имеет свои собственные потоки ввода/вывода репликации и SQL.
Реплика использует два потока для разделения чтения обновлений с источника и их выполнения в независимых задачах. Таким образом, задача чтения транзакций не замедляется, если процесс их применения медленный. Например, если сервер реплики некоторое время не работал, его поток ввода/вывода может быстро извлечь всё содержимое двоичного журнала с источника при запуске реплики, даже если поток SQL сильно отстаёт. Если реплика остановится до того, как поток SQL выполнит все извлеченные инструкции, поток ввода/вывода по крайней мере извлёк всё, чтобы безопасная копия транзакций хранилась локально в релейных журналах реплики, готовая к выполнению при следующем запуске реплики.
Для дальнейшей паралелизации задач на реплике можно установить системную переменную slave_parallel_workers на значение больше 0 (по умолчанию). При этом реплика создаёт указанное количество потоков-обработчиков для применения транзакций плюс координаторный поток для их управления. Если вы используете несколько каналов репликации, каждое канал имеет это количество потоков. Реплика с slave_parallel_workers, установленным на значение больше 0, называется многопоточной репликой. При такой настройке транзакции, которые завершаются неудачей, могут быть повторены.
Многопоточные реплики в настоящее время не поддерживаются NDB Cluster, который молча игнорирует настройку этой переменной. Подробнее см. Раздел 21.7.3, «Известные проблемы репликации NDB Cluster».
© 2025 Oracle
Licensed under the GPLv2 License.