MySQL создание реплик с использованием плагина clone с минимальным простоем Source

MySQL 8.0.24, настроена репликация, необходимо создать дополнительную реплику, или пересоздать имеющуюся.

10.50.15.62 – Source

10.50.15.63 – Replica

На Source установим плагин, создадим пользователя

INSTALL PLUGIN clone SONAME 'mysql_clone.so';
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'QwErTy32!@aSdFg!';
GRANT BACKUP_ADMIN, CLONE_ADMIN, REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
FLUSH PRIVILEGES;
-- RESTART; -- желательно сделать рестарт инстанса

На новой Replica. Это может быть и чистая установка, так и уже работающий сервер. Клонирование удалит все базы и всех пользователей, создаст копию Source

INSTALL PLUGIN clone SONAME 'mysql_clone.so';
SET GLOBAL clone_valid_donor_list = '10.50.15.62:3306';
CLONE INSTANCE FROM 'replica_user'@'10.50.15.62':3306 IDENTIFIED BY 'QwErTy32!@aSdFg!';

После этого начнется процесс копирования. Операция клонирования выполняется практически со скоростью сети между источником и репликой. Это гораздо быстрее “традиционного” mysqldump с последующим восстановлением. И надёжнее чем копирование datadir с другой реплики.

Завершив клонирование, инстанс сам сделает RESTART, но может сам не включиться из-за разницы в конфигурационных файлах. Корректные конфигурационные файлы необходимо подготовить заранее.

В моем случае кластер использует Semisynchronous Replication. Для источника и реплики используются разные плагины. При клонировании с мастера системный словарь будет содержать плагин rpl_semi_sync_master, необходимо его удалить, установить rpl_semi_sync_slave, при его отсутствии инстанс не запустится с заранее подготовленным для реплики конфигурационным файлом. Необходимо закомментировать опцию, включить инстанс, переустановить плагин и перезапустить с нужной настройкой в конфигурационном файле.

у мастера rpl_semi_sync_master_enabled = 1

у реплики rpl_semi_sync_slave_enabled = 1

ВАЖНО: кластер использует GTID, что позволит запустить синхронизацию реплики без указания строк в бинарном журнале. Выполняем на реплике:

-- установим источник реплики, канал репликации
CHANGE REPLICATION SOURCE TO
 SOURCE_USER='replica_user', SOURCE_PASSWORD='QwErTy32!@aSdFg!',
 SOURCE_HOST='10.50.15.62', SOURCE_PORT=3306,
 SOURCE_AUTO_POSITION=1, SOURCE_CONNECT_RETRY=5,
 SOURCE_RETRY_COUNT=86400 FOR CHANNEL 'ch01';
-- запустить канал репликации
START REPLICA FOR CHANNEL 'ch01';
-- проверим состояние
SELECT CHANNEL_NAME, SOURCE_UUID, SERVICE_STATE
 FROM performance_schema.replication_connection_status;

Читать по теме:

https://dev.mysql.com/doc/refman/8.0/en/clone-plugin.html

https://dev.mysql.com/doc/refman/8.0/en/replication-semisync-installation.html

Close Menu